2014-10-21 5 views
3

У меня есть веб-приложение Java. Я хочу внедрить логин SAML Single-Sign-On для своего приложения. У меня есть это GitHub onelogin program, чтобы отправить запрос и получить ответ. Но он работал неправильно. Я создал там одну учетную запись. Но у меня нет учетной записи предприятия. Когда я запустил приложение, он отправится на страницу onelogin login. Я попытался войти в систему, но он не возвращает anyuthing в ответе, показывая, что у меня нет разрешения. Если я также выдаю неверные учетные данные, он не дает ответа SAML.Создать утверждение SAML и подписать ответ

Итак, я решил создать утверждение и подписать его.

  1. Нужно ли сначала отправить запрос SAML любому провайдеру идентификации?
  2. Как создать образец SAML утверждение вместо того, чтобы IdP (Like this is fine?)
  3. После того, как я получаю ответ SAML, как мне подписать его в моем приложении и продолжить?

Благодаря

UPDATE 1

<?xml version="1.0" encoding="UTF-8"?> 
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
    ID="123" InResponseTo="abc" IssueInstant="2014-11-21T17:13:42.872Z" 
    Version="2.0"> 
    <samlp:Status> 
     <samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/> 
    </samlp:Status> 
    <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Version="2.0"> 
     <saml:Subject> 
      <saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"> 
       [email protected] 
      </saml:NameID> 
     </saml:Subject> 
     <saml:AuthnStatement AuthnInstant="2014-11-21T17:13:42.899Z"> 
      <saml:AuthnContext> 
       <saml:AuthnContextClassRef> 
        urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport 
       </saml:AuthnContextClassRef> 
      </saml:AuthnContext> 
     </saml:AuthnStatement> 
    </saml:Assertion> 
</samlp:Response> 

ответ

5

Первое, что вам нужно сделать, это прочитать по протоколу SAML. У меня есть два блога, которые я могу порекомендовать.

Далее вы можете построить интеграции SAML в вашем приложении или вы можете использовать приложение стороннего сделать интеграцию. Типичными сторонними приложениями являются Shibboleth и OpenAM.

Если вы решили создать его в своем приложении, вы можете, например, использовать OpenSAML. OpenSAML - это библиотека, которая помогает работать с сообщениями SAML. I have several blogs on the subject и one book that is good to start with

О ваших вопросах.

  1. Вам не нужно отправлять заявку. IDP может запустить процесс без запроса.
  2. Ну, вы можете создать его, просто отредактировав тот, который вы нашли. Вы также можете использовать OpenSAML для создания утверждения
  3. Вы не подписываете ответ в своем приложении, IDP подписывает ответ. проверка подписи зависит от программного обеспечения. Here is how you do it in OpenSAML
+0

OK. Поэтому я могу жестко кодировать строку XML, как в другом примере, как утверждение SAML. То, что мне не нужно подписывать. Тогда как я могу проверить его? Я не сохранил сертификат в хранилище ключей. – iUser

+0

Я не знаю, что такое строка XML. вы проверяете использование сертификата. Это можно получить из файла или из метаданных SAML –

+0

Где создавать метаданные? – iUser

1

Вы также можете использовать Java Saml from Onelogin подписать ответ, используя их служебный класс (com.onelogin.saml2.util.Util):

// loads xml string into Document 
Document document = Util.loadXML(saml); 

// loads certificate and private key from string 
X509Certificate cert = Util.loadCert(pubKeyBytes); 
PrivateKey privateKey = Util.loadPrivateKey(privKeyBytes); 

// signs the response 
String signedResponse = Util.addSign(document, privateKey, cert, null); 

Вы также можете использовать другой .addSign метод, который принимает Node, как первый параметр, чтобы подписать утверждение ответа SAML.

Их Maven зависимость является:

<dependency> 
    <groupId>com.onelogin</groupId> 
    <artifactId>java-saml</artifactId> 
    <version>2.0.0</version> 
</dependency> 
Смежные вопросы