BlueMix SingleSignOn,如何调用启用SSO服务的BlueMix应用程序的REST API

BlueMix SingleSignOn,如何调用启用SSO服务的BlueMix应用程序的REST API,rest,single-sign-on,ibm-cloud,Rest,Single Sign On,Ibm Cloud,我有一个BlueMix应用程序,有几个RestAPI调用。将SignleSignOn服务添加到此应用程序后,我无法通过应用程序终结点进行RestAPI调用。有没有办法通过REST调用头传递SSO的身份验证 SSO配置为启用云目录。我应该如何在Bluemix应用程序Rest api调用中传递用户详细信息 到目前为止,我只能使用浏览器通过SSO登录应用程序,并且只能在同一浏览器中执行REST调用 示例RestCall-> web.xml摘录: <?xml version="1.0" encod

我有一个BlueMix应用程序,有几个RestAPI调用。将SignleSignOn服务添加到此应用程序后,我无法通过应用程序终结点进行RestAPI调用。有没有办法通过REST调用头传递SSO的身份验证

SSO配置为启用云目录。我应该如何在Bluemix应用程序Rest api调用中传递用户详细信息

到目前为止,我只能使用浏览器通过SSO登录应用程序,并且只能在同一浏览器中执行REST调用

示例RestCall->

web.xml摘录:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSc hema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>SolutionManager</display-name>
<filter>
    <filter-name>RequestRedirect</filter-name>
    <filter-class>com.ibm.ba.ssl.RedirectFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>RequestRedirect</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
    <filter-name>AuthenticationFilter</filter-name>
    <filter-class>com.ibm.ba.sm.auth.AuthenticationFilter</filter-class>
</filter>   
<filter-mapping>
    <filter-name>AuthenticationFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>   
<servlet>
    <description>
    </description>
    <display-name>sample</display-name>
    <servlet-name>sample</servlet-name>
    <servlet-class>com.ibm.ba.ers.ErsServlet</servlet-class>
    <enabled>true</enabled>
    <async-supported>false</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>sample</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>
<resource-ref>
    <description>MQLight Service</description>
    <res-ref-name>jms/MQLight-mc</res-ref-name>
    <res-type>javax.jms.ConnectionFactory</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

<listener>
  <listener-class>
      com.ibm.ba.SMAppStart
  </listener-class>
</listener>

<security-constraint>
    <display-name>Authenticated Users</display-name>
    <web-resource-collection>
        <web-resource-name>ALL</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>GET</http-method>
        <http-method>PUT</http-method>
        <http-method>HEAD</http-method>
        <http-method>TRACE</http-method>
        <http-method>POST</http-method>
        <http-method>DELETE</http-method>
        <http-method>OPTIONS</http-method>
    </web-resource-collection>
    <auth-constraint>
        <role-name>Users</role-name>
    </auth-constraint>
</security-constraint>

解决方案经理
请求重定向
com.ibm.ba.ssl.RedirectFilter
请求重定向
/*
身份验证过滤器
com.ibm.ba.sm.auth.AuthenticationFilter
身份验证过滤器
/*
样品
样品
com.ibm.ba.ers.erservlet
真的
假的
样品
/*
index.html
MQLight服务
jms/MQLight-mc
javax.jms.ConnectionFactory
容器
可分享
com.ibm.ba.SMAppStart
验证用户组
全部的
/*
得到
放
头
痕迹
邮递
删除
选择权
使用者

谢谢,
Lokesh

要访问Bluemix上的任何服务,您需要提供随附的承载令牌。 要获取承载令牌,请使用以下API调用:

发布

请求正文:“授权类型=密码和用户名=[您的bluemix id]&密码=[您的bluemix密码]

标题:{‘授权’:‘基本Y2Y6’, “接受”:“应用程序/json”, “内容类型”:“应用程序/x-www-form-urlencoded }

响应类似于: { “访问令牌”:“[来自访问令牌的值]”, “令牌类型”:“承载者”, “刷新令牌”:“[value2]”, “到期日”:43199, “范围”:“password.write cloud\u controller.write openid cloud\u controller.read”, “jti”:“20e70e6e-5700-476c-bc15-7869c5fb4b07” }

要为您的服务进行REST呼叫,请使用以下标题:

{'accept':'application/json','content type':'application/json'


'authorization':'bearer[space][value\u from\u access\u token]}

到目前为止,您收到的答案对于新的SSO服务(包括对云内注册表的支持)是不正确的。将SSO服务添加到应用程序时,J2EE安全约束将应用到应用程序,SSO服务将成为满足这些安全约束的身份验证源。这就是您当前需要在浏览器身份验证后获得的浏览器cookie来进行REST调用的最终原因


如果看不到部署的应用程序web.xml和server.xml文件,就不清楚最好的方法是什么,但是您可能需要使用明确定义的安全约束构建一个EAR文件,并通过另一种机制使REST API端点未经身份验证或身份验证。

是Bluemix和bound上此REST API的调用方到同一个SSO服务?是的,REST api是我的bluemix应用程序的一部分,并通过应用程序的端点公开。如果没有SSO服务,如果我对上述示例Restcall执行GET调用,它将返回JSON。将SSO绑定到我的应用程序后,相同的GET调用将返回SSO登录页的HTML。我应该如何将SSO凭据与GET call以到达我的应用程序的端点?感谢您回复devesh,我没有尝试访问SingleSignOn服务,我只是尝试通过REST在bluemix上到达我自己的应用程序的端点。例如:如果我的应用程序URL为,并且我执行GET call,它将返回HTML响应。将SSO服务添加到我的bluemix应用程序后,相同的GET call将返回HTML我应该如何在SSO上传递云目录的凭据才能通过它并到达我的应用程序的端点?好的,然后查看以下链接:@devesh ahuja你知道端点是针对IAM而不是UAA的吗?Thanks@EShindler对不起,我不知道。你知道怎么知道吗?我正在尝试切换我的应用程序n从UAA到IAM…感谢@Shane Weeden,我已经将web.xml添加到这篇文章中。所使用的server.xml是由bluemix上的liberty服务器自动生成的,我如何才能使REST api不通过SSO进行身份验证?嗨,Shane,你能给我一些关于如何通过另一种机制使REST api端点未经身份验证的想法吗?我仍然对t他的问题无法绕过bluemix for rest api上的SSO