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

时间:2015-06-15 17:34:46

标签: rest single-sign-on ibm-cloud

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

SSO配置为启用了云目录。我应该如何将用户详细信息与Bluemix app Rest api呼叫一起传递?

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

示例RestCall - > http://myapp.mybluemix.net/sm/metadata

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>

谢谢, LOKESH

2 个答案:

答案 0 :(得分:1)

要访问Bluemix上的任何服务,您需要提供随身携带的承载令牌。 要获得持有者令牌,请使用以下API调用:

发布 http://login.ng.bluemix.net/UAALoginServerWAR/oauth/token

请求正文:“grant_type =密码&amp;用户名= [your-bluemix-id]&amp; password = [your-bluemix-password]

标题: {'授权':'基本Y2Y6',                'accept':'application / json',                'content-type':'application / x-www-form-urlencoded              }

回复就像: {   “access_token”:“[value_from_access_token]”,   “token_type”:“bearer”,   “refresh_token”:“[value2]”,   “expires_in”:43199,   “scope”:“password.write cloud_controller.write openid cloud_controller.read”,   “jti”:“20e70e6e-5700-476c-bc15-7869c5fb4b07” }

要为您的服务进行REST调用,请使用下面提到的标题:

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

'授权':'持票人[空格] [value_from_access_token] '}

答案 1 :(得分:0)

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

在没有看到已部署的应用程序web.xml和server.xml文件的情况下,不清楚最佳前进方向是什么,但是您可能需要构建具有明确定义的安全性约束的EAR文件并生成REST API端点通过其他机制进行未经身份验证或身份验证。