2015-06-15 2 views
2

У меня есть приложение BlueMix с несколькими вызовами RestAPI. После добавления службы SignleSignOn в это приложение я не могу делать вызовы RestAPI через конечную точку приложения. Есть ли способ передать аутентификацию SSO через заголовки вызовов REST?BlueMix SingleSignOn, Как вызвать REST API приложения BlueMix с включенной службой единого входа

SSO настроен с включенным каталогом облака. Как я должен передавать данные пользователя вместе с приложением для звонков с поддержкой Bluemix?

На данный момент я могу использовать браузер для входа через 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

Является ли вызывателем этого REST API на Bluemix и привязан к тому же сервису единого входа? –

+0

Да, REST api является частью моего приложения bluemix и Exposed через конечную точку приложения. Без SSO-сервиса, если я делаю вызов GET для вышеуказанного примера Restcall, он вернет JSON. После привязки SSO к моему приложению тот же вызов GET с возвратом HTML-страницы целевой страницы единого входа. Как я должен передавать учетные данные SSO вместе с вызовом GET для доступа к конечной точке моего приложения? –

ответ

2

Чтобы получить доступ к любому сервису на Bluemix, вам необходимо предоставить однонаправленный маркер вместе с ним. Для получения носителя маркера, используйте ниже API вызова:

POSThttp://login.ng.bluemix.net/UAALoginServerWAR/oauth/token

тело запроса: «grant_type = пароль & имя пользователя = [ваш-bluemix-идентификатор] & пароль = [ваш-bluemix -password]

заголовки: { 'авторизации': 'Basic Y2Y6', 'принять': 'применение/JSON', 'Content-Type': «применение/х-WWW-форма -urlencoded }

отклика будет, как: { "access_token": "[value_from_access_token]", "token_type": "носителем", "refresh_token": "[значение2]", " expires_in ": 43199, "сфера": "password.write cloud_controller.write cloud_controller.read OpenID", "JTI": "20e70e6e-5700-476c-bc15-7869c5fb4b07" }

Чтобы REST требует вы пользуетесь нижеуказанными заголовками:

{ 'принимает': 'приложения/JSON', 'Content-Type': 'приложения/JSON',

'разрешение': 'носителем [пробел] [value_from_access_token]'}

+0

Спасибо за ответ devesh, я не пытаюсь получить доступ к службе SingleSignOn, я только пытаюсь добраться до конечной точки моего собственного приложения на bluemix через REST. Например: если мой URL-адрес приложения - http://myapp.mybluemix.net/, и я делаю вызов GET, он вернет ответ HTML. После добавления службы SSO к моему приложению Bluemix. Тот же вызов GET возвращает HTML-адрес страницы единого входа. Как я могу передать учетные данные Cloud Directory в SSO, чтобы пройти мимо него и достичь конечной точки моего приложения? –

+0

Итак, ознакомьтесь с этими ссылками: http://tools.ietf.org/html/draft-ietf-oauth-saml2-bearer-17 и http://tools.ietf.org/html/draft-ietf -oauth-json-web-token-05 # page-21 –

+0

@ devesh-ahuja Знаете ли вы, что конечная точка для IAM, а не UAA? Спасибо –

0

Ответы, которые вы получили до сих пор, неверны для новой службы единого входа (которая включает поддержку реестра в облаке). Когда вы добавили службу единого входа в приложение, к вашему приложению применяются ограничения безопасности J2EE, и служба единого входа становится источником аутентификации для удовлетворения этих ограничений безопасности. Это, в конечном счете, почему вы в настоящее время нуждаетесь в cookie-файлах браузера, полученных после аутентификации браузера, чтобы сделать ваши звонки REST.

Не просматривая развернутые приложения web.xml и server.xml-файлах неясно, какой лучший способ переадресации, однако вам может потребоваться создать файл EAR с явно определенными ограничениями безопасности и сделать ваши конечные точки API REST не прошедшими проверку подлинности или аутентификацию с помощью другого механизма.

+0

Спасибо @Shane Weeden, я добавил web.xml к этому сообщению. Используемый сервер.xml автоматически генерируется сервером свободы на bluemix. Как я могу заставить REST api не проверять подлинность через SSO? –

+0

Привет, Шейн, не могли бы вы дать некоторые идеи о том, как сделать конечные точки API REST без проверки подлинности с помощью другого механизма? Я все еще Bolcked по этому вопросу не смог обойти SSO на bluemix для отдыха api –

Смежные вопросы