我有一个带有一些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
答案 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端点通过其他机制进行未经身份验证或身份验证。