Схема протокола ниже описывает последовательность единого входа. Облачная служба (поставщик услуг) использует привязку HTTP Redirect для передачи элемента AuthnRequest (запрос аутентификации) в Azure AD (поставщик удостоверений). Затем Azure AD использует HTTP-привязку публикации для публикации элемента Response в облачной службе.
Чтобы запросить аутентификацию пользователя, облачные службы отправляют элемент AuthnRequest в Azure AD. Пример SAML 2.0 AuthnRequest может выглядеть следующим образом:
<samlp:AuthnRequest
xmlns="urn:oasis:names:tc:SAML:2.0:metadata"
ID="id6c1c178c166d486687be4aaf5e482730"
Version="2.0" IssueInstant="2013-03-18T03:28:54.1839884Z"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
</samlp:AuthnRequest>
Когда запрошенный вход в систему завершается успешно, Azure AD публикует ответ в облачной службе. Ответ на успешную попытку входа выглядит следующим образом:
<samlp:Response ID="_a4958bfd-e107-4e67-b06d-0d85ade2e76a" Version="2.0" IssueInstant="2013-03-18T07:38:15.144Z" Destination="https://contoso.com/identity/inboundsso.aspx" InResponseTo="id758d0ef385634593a77bdf7e632984b6" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://login.microsoftonline.com/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success" />
</samlp:Status>
<Assertion ID="_bf9c623d-cc20-407a-9a59-c2d0aee84d12" IssueInstant="2013-03-18T07:38:15.144Z" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
<Issuer>https://login.microsoftonline.com/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
...
</ds:Signature>
<Subject>
<NameID>Uz2Pqz1X7pxe4XLWxV9KJQ+n59d573SepSAkuYKSde8=</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData InResponseTo="id758d0ef385634593a77bdf7e632984b6" NotOnOrAfter="2013-03-18T07:43:15.144Z" Recipient="https://contoso.com/identity/inboundsso.aspx" />
</SubjectConfirmation>
</Subject>
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
<AttributeStatement>
<Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name">
<AttributeValue>testuser@contoso.com</AttributeValue>
</Attribute>
<Attribute Name="http://schemas.microsoft.com/identity/claims/objectidentifier">
<AttributeValue>3F2504E0-4F89-11D3-9A0C-0305E82C3301</AttributeValue>
</Attribute>
...
</AttributeStatement>
<AuthnStatement AuthnInstant="2013-03-18T07:33:56.000Z" SessionIndex="_bf9c623d-cc20-407a-9a59-c2d0aee84d12">
<AuthnContext>
<AuthnContextClassRef> urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
</AuthnContext>
</AuthnStatement>
</Assertion>
</samlp:Response>
Элемент Response включает в себя результат запроса авторизации. Azure AD устанавливает значения идентификатора, версии и IssueInstant в элементе Response. Он также устанавливает следующие атрибуты:
• Назначение: при успешном завершении входа в систему устанавливается значение RedirectUri поставщика услуг (облачная служба).
• InResponseTo: для него устанавливается атрибут ID элемента AuthnRequest, инициировавшего ответ.
Для дальнейшей документации, вы можете обратиться к темам ниже
https://docs.microsoft.com/en-us/azure/active-directory/develop/single-sign-on-saml-protocol
https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-saml-protocol-reference
Протокол SAML требует, чтобы поставщик удостоверений (Azure AD) и поставщик услуг (приложение) обменивались информацией о себе.
// Выполнение запросов на аутентификацию
mAuthContext.acquireToken (
getActivity (),
RESOURCE_ID,
ID КЛИЕНТА,
Redirect_uri
PromptBehavior.Auto,
getAuthInteractiveCallback ());
// ...
// Получить токены для вызова таких API, как Microsoft Graph
mAuthResult.getAccessToken ()
Получив токен, вы можете использовать его для вызова Graph API.
Здесь у нас есть вики для настройки единого входа в Android, вас это может заинтересовать.
https://github.com/AzureAD/azure-activedirectory-library-for-android/wiki
Надеюсь, это поможет.