Protokol SAML akses menyeluruh
Artikel ini mencakup permintaan dan respons autentikasi SAML 2.0 yang didukung Azure Active Directory (Azure AD) untuk Akses Menyeluruh (SSO).
Diagram protokol di bawah ini menjelaskan urutan akses menyeluruh. Layanan cloud (penyedia layanan) menggunakan pengikatan Pengalihan HTTP untuk meluluskan elemen AuthnRequest (permintaan autentikasi) ke Azure AD (penyedia identitas). Azure AD lalu menggunakan pengikatan postingan HTTP untuk memposting elemen Response ke layanan cloud.

Catatan
Artikel ini membahas tentang menggunakan SAML untuk akses menyeluruh. Untuk informasi selengkapnya tentang cara lain menangani akses menyeluruh (misalnya, dengan menggunakan OpenID Connect atau autentikasi Windows terintegrasi), lihat Akses menyeluruh ke aplikasi di Azure Active Directory.
AuthnRequest
Untuk meminta autentikasi pengguna, layanan cloud mengirim elemen AuthnRequest ke Azure AD. Sampel SAML 2.0 AuthnRequest dapat terlihat seperti contoh berikut:
<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>
| Parameter | Jenis | Deskripsi |
|---|---|---|
| ID | Diperlukan | Azure AD menggunakan atribut ini untuk mengisi atribut InResponseTo dari respons yang dikembalikan. ID tidak boleh diawali dengan angka, jadi strategi umum adalah untuk mengawali untai seperti "id" ke representasi untai GUID. Misalnya, id6c1c178c166d486687be4aaf5e482730 adalah ID yang valid. |
| Versi | Diperlukan | Parameter ini harus diatur ke 2.0. |
| IssueInstant | Diperlukan | Ini adalah untai DateTime dengan nilai UTC dan format komunikasi dua arah ("o"). Azure AD mengharapkan nilai DateTime dari jenis ini, tetapi tidak mengevaluasi atau menggunakan nilai tersebut. |
| AssertionConsumerServiceURL | Opsional | Jika disediakan, parameter ini harus cocok dengan RedirectUri layanan cloud di Azure AD. |
| ForceAuthn | Opsional | Ini adalah nilai boolean. Jika true, ini berarti bahwa pengguna akan dipaksa untuk mengautentikasi ulang, meskipun pengguna memiliki sesi yang valid dengan Azure AD. |
| IsPassive | Opsional | Ini adalah nilai boolean yang menentukan apakah Azure AD harus mengautentikasi pengguna secara diam-diam, tanpa interaksi pengguna, menggunakan cookie sesi jika ada. Jika hal ini benar, Microsoft Azure Active Directory akan mencoba mengautentikasi pengguna menggunakan kuki sesi. |
Semua atribut AuthnRequest lainnya, seperti Persetujuan, Tujuan, AssertionConsumerServiceIndex, AttributeConsumerServiceIndex, dan ProviderName diabaikan.
Azure AD juga mengabaikan elemen Conditions di AuthnRequest.
Pengeluar sertifikat
Elemen Issuer di AuthnRequest harus sama persis dengan salah satu ServicePrincipalNames di layanan cloud di Azure AD. Biasanya, ini diatur ke URI ID Aplikasi yang ditentukan selama pendaftaran aplikasi.
Kutipan SAML yang berisi elemen Issuer terlihat seperti contoh berikut:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.contoso.com</Issuer>
NameIDPolicy
Elemen ini meminta format ID nama tertentu dalam respons, dan bersifat opsional dalam elemen AuthnRequest yang dikirim ke Azure AD.
Elemen NameIdPolicy terlihat seperti contoh berikut:
<NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent"/>
Jika NameIDPolicy disediakan, Anda dapat menyertakan atribut Format opsionalnya. Atribut Format hanya dapat memiliki salah satu nilai berikut; nilai lainnya akan menghasilkan kesalahan.
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent: Azure Active Directory menerbitkan klaim NameID sebagai pengidentifikasi pairwise.urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress: Azure Active Directory menerbitkan klaim NameID dalam format alamat email.urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified: Nilai ini mengizinkan Azure Active Directory untuk memilih format klaim. Azure Active Directory menerbitkan NameID sebagai pengidentifikasi pairwise.urn:oasis:names:tc:SAML:2.0:nameid-format:transient: Azure Active Directory menerbitkan klaim NameID sebagai nilai unik yang dihasilkan secara acak untuk operasi SSO saat ini. Ini berarti nilai bersifat sementara dan tidak dapat digunakan untuk mengidentifikasi pengguna yang mengautentikasi.
Jika SPNameQualifier ditentukan, Azure AD akan menyertakan SPNameQualifier yang sama dalam respons.
Azure AD mengabaikan atribut AllowCreate.
RequestedAuthnContext
Elemen RequestedAuthnContext menentukan metode autentikasi yang diinginkan. Ini bersifat opsional di elemen AuthnRequest yang dikirim ke Azure AD. Azure AD mendukung nilai AuthnContextClassRef seperti urn:oasis:names:tc:SAML:2.0:ac:classes:Password.
Cakupan
Elemen Scoping yang menyertakan daftar penyedia identitas, bersifat opsional dalam elemen AuthnRequest yang dikirim ke Azure AD.
Jika disediakan, jangan sertakan atribut ProxyCount, elemen IDPListOption atau RequesterID, karena tidak didukung.
Tanda Tangan
Elemen Signature dalam elemen AuthnRequest bersifat opsional. Azure AD tidak memvalidasi permintaan autentikasi bertandatangan jika tanda tangan sudah ada. Verifikasi pemohon disediakan hanya dengan menanggapi URL Layanan Tuntutan Konsumen yang terdaftar.
Subjek
Jangan sertakan elemen Subject. Azure AD tidak mendukung menentukan subjek untuk permintaan dan akan mengembalikan kesalahan jika disediakan.
Respons
Saat proses masuk yang diminta berhasil diselesaikan, Azure AD memposting respons terhadap layanan cloud. Respons terhadap upaya masuk yang berhasil terlihat seperti contoh berikut:
<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>
Respons
Elemen Response ini mencakup hasil permintaan otorisasi. Azure AD mengatur nilai ID, Version, dan IssueInstant dalam elemen Response. Ini juga mengatur atribut berikut:
Destination: Ketika proses masuk berhasil diselesaikan, ini diatur keRedirectUripenyedia layanan (layanan cloud).InResponseTo: Ini diatur ke atributIDelemenAuthnRequestyang memulai respons.
Pengeluar sertifikat
Microsoft Azure Active Directory menyetel elemen Issuer menjadi https://sts.windows.net/<TenantIDGUID>/ di mana <TenantID ID> adalah tenantID dari penyewa Microsoft Azure Active Directory.
Misalnya, respons dengan elemen Pengeluar Sertifikat dapat terlihat seperti contoh berikut:
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion"> https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
Status
Elemen Status ini menunjukkan proses masuk berhasil atau gagal. Ini mencakup elemen StatusCode, yang berisi kode atau sekumpulan kode berlapis yang mewakili status permintaan. Ini juga mencakup elemen StatusMessage, yang berisi pesan kesalahan kustom yang dihasilkan selama proses masuk.
Contoh berikut adalah respons SAML terhadap upaya masuk yang gagal.
<samlp:Response ID="_f0961a83-d071-4be5-a18c-9ae7b22987a4" Version="2.0" IssueInstant="2013-03-18T08:49:24.405Z" InResponseTo="iddce91f96e56747b5ace6d2e2aa9d4f8c" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
<samlp:Status>
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Requester">
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestUnsupported" />
</samlp:StatusCode>
<samlp:StatusMessage>AADSTS75006: An error occurred while processing a SAML2 Authentication request. AADSTS90011: The SAML authentication request property 'NameIdentifierPolicy/SPNameQualifier' is not supported.
Trace ID: 66febed4-e737-49ff-ac23-464ba090d57c
Timestamp: 2013-03-18 08:49:24Z</samlp:StatusMessage>
</samlp:Status>
</samlp:Response>
Penegasan
Selain ID, IssueInstant dan Version, Azure AD mengatur elemen berikut dalam elemen Assertion respons.
Pengeluar sertifikat
Hal ini disetel ke https://sts.windows.net/<TenantIDGUID>/dengan <TenantIDGUID> adalah ID Penyewa Microsoft Azure Active Directory.
<Issuer>https://sts.windows.net/82869000-6ad1-48f0-8171-272ed18796e9/</Issuer>
Tanda Tangan
Azure AD menandatangani penegasan tersebut sebagai tanggapan atas proses masuk yang berhasil. Elemen Signature ini berisi tanda tangan digital yang dapat digunakan layanan cloud untuk mengautentikasi sumber data untuk memverifikasi integritas penegasan.
Untuk menghasilkan tanda tangan digital ini, Azure AD menggunakan kunci penandatanganan dalam elemen IDPSSODescriptor dari dokumen metadatanya.
<ds:Signature xmlns:ds="https://www.w3.org/2000/09/xmldsig#">
digital_signature_here
</ds:Signature>
Subjek
Ini menentukan perwakilan yang menjadi subjek pernyataan dalam penegasan. Ini berisi elemen NameID yang mewakili pengguna terautentikasi. Nilai NameID adalah target pengidentifikasi yang hanya ditujukan kepada penyedia layanan yang merupakan audiens untuk token. Ini terus-menerus - dapat dicabut, tetapi tidak pernah ditugaskan kembali. Ini juga tidak detail, karena tidak mengungkapkan informasi apa pun tentang pengguna, dan tidak dapat digunakan sebagai pengidentifikasi untuk kueri atribut.
Atribut Method dari elemen SubjectConfirmation selalu diatur ke urn:oasis:names:tc:SAML:2.0:cm:bearer.
<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>
Kondisi
Elemen ini menentukan kondisi yang menentukan penggunaan penegasan SAML yang dapat diterima.
<Conditions NotBefore="2013-03-18T07:38:15.128Z" NotOnOrAfter="2013-03-18T08:48:15.128Z">
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
</Conditions>
Atribut NotBefore dan NotOnOrAfter atribut menentukan interval di mana penegasan valid.
- Nilai atribut
NotBeforeadalah sama dengan atau sedikit (kurang dari satu detik) lebih baru dari nilai atributIssueInstantelemenAssertion. Azure AD tidak memperhitungkan perbedaan waktu antara Azure AD dan layanan cloud (penyedia layanan), dan tidak menambahkan buffer apa pun untuk saat ini. - Nilai atribut
NotOnOrAfteradalah 70 menit lebih lambat dari nilai atributNotBefore.
Audiens
Ini berisi URI yang mengidentifikasi audiens yang dituju. Azure AD mengatur nilai elemen ini ke nilai elemen Issuer dari AuthnRequest yang menginisiasi masuk. Untuk mengevaluasi nilai Audience, gunakan nilai App ID URI yang ditentukan selama pendaftaran aplikasi.
<AudienceRestriction>
<Audience>https://www.contoso.com</Audience>
</AudienceRestriction>
Seperti nilai Issuer, nilai Audience harus sama persis dengan salah satu nama perwakilan layanan yang mewakili layanan cloud di Azure AD. Namun, jika nilai elemen Issuer bukan nilai URI, nilai Audience dalam respons adalah nilai Issuer yang berawalan spn:.
AttributeStatement
Ini berisi klaim tentang subjek atau pengguna. Kutipan berikut berisi elemen AttributeStatement sampel. Elipsis menunjukkan bahwa elemen dapat menyertakan beberapa atribut dan nilai atribut.
<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>
- Klaim Nama - Nilai atribut
Name(http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name) adalah nama prinsipal pengguna yang diautentikasi, sepertitestuser@managedtenant.com. - Klaim ObjectIdentifier - nilai atribut
ObjectIdentifier(http://schemas.microsoft.com/identity/claims/objectidentifier) adalahObjectIdobjek direktori yang mewakili pengguna terautentikasi di Azure AD.ObjectIdadalah pengidentifikasi yang tetap, unik secara global, dan menggunakan kembali pengidentifikasi aman dari pengguna terautentikasi.
AuthnStatement
Elemen ini menegaskan bahwa subjek penegasan diautentikasi dengan cara tertentu pada waktu tertentu.
- Atribut
AuthnInstantmenentukan waktu pengguna terautentikasi dengan Azure AD. - Elemen
AuthnContextmenentukan konteks autentikasi yang digunakan untuk mengautentikasi pengguna.
<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>