Megosztás a következőn keresztül:


Azonosító jogkivonat-tipp technikai profiljának definiálása egyéni Azure Active Directory B2C-szabályzatban

Az Azure AD B2C lehetővé teszi a függő entitásalkalmazások számára, hogy az OAuth2 engedélyezési kérelem részeként bejövő JWT-t küldjenek. A JWT-jogkivonatot kibocsáthatja egy függő entitásalkalmazás vagy egy identitásszolgáltató, és továbbíthat egy tippet a felhasználóról vagy az engedélyezési kérelemről. Az Azure AD B2C ellenőrzi az aláírást, a kiállító nevét és a jogkivonat célközönségét, és kinyeri a jogcímet a bejövő jogkivonatból.

Használati esetek

Ezzel a megoldással adatokat küldhet egyetlen JWT-jogkivonatba ágyazott Azure AD B2C-be. A Signup with email invitation megoldás, ahol a rendszergazda aláírt meghívást küldhet a felhasználóknak, id_token_hint alapul. Csak a meghívó e-mailhez hozzáféréssel rendelkező felhasználók hozhatják létre a fiókot a címtárban.

Jogkivonat-aláírási módszer

A id_token_hint a jogkivonat kiállítója (függő entitásalkalmazás vagy identitásszolgáltató) összeállítja a jogkivonatot, majd aláírási kulccsal igazolja, hogy a jogkivonat megbízható forrásból származik. Az aláíró kulcs lehet szimmetrikus vagy aszimmetrikus. A szimmetrikus titkosítás vagy a titkos kulcs titkosítása közös titkos kóddal írja alá és érvényesíti az aláírást. Az aszimmetrikus titkosítás vagy nyilvános kulcsú titkosítás olyan titkosítási rendszer, amely titkos kulcsot és nyilvános kulcsot is használ. A titkos kulcs csak a jogkivonat kiállítója számára ismert, és a jogkivonat aláírására szolgál. A nyilvános kulcs meg van osztva az Azure AD B2C-szabályzattal a jogkivonat aláírásának ellenőrzéséhez.

Jogkivonat formátuma

A id_token_hint érvényes JWT-jogkivonatnak kell lennie. Az alábbi táblázat a kötelező jogcímeket sorolja fel. További jogcímek megadása nem kötelező.

Name Jogcím Példaérték Leírás
Célközönség aud a489fc44-3cc0-4a78-92f6-e413cd853eae A jogkivonat kívánt címzettjének azonosítása. A célközönség egy tetszőleges sztring, amelyet a tokenkibocsátó határoz meg. Az Azure AD B2C ellenőrzi ezt az értéket, és elutasítja a jogkivonatot, ha az nem egyezik.
Issuer iss https://localhost Azonosítja a biztonsági jogkivonat-szolgáltatást (tokenkibocsátó). A kiállító egy tetszőleges URI, amelyet a tokenkibocsátó határoz meg. Az Azure AD B2C ellenőrzi ezt az értéket, és elutasítja a jogkivonatot, ha az nem egyezik.
Lejárati idő exp 1600087315 Az az időpont, amikor a jogkivonat érvénytelenné válik, az időszaki időpontban jelenik meg. Az Azure AD B2C ellenőrzi ezt az értéket, és elutasítja a jogkivonatot, ha a jogkivonat lejárt.
Korábban nem nbf 1599482515 Az az időpont, amikor a jogkivonat érvényessé válik, az időszaki időpontban jelenik meg. Ez az idő általában megegyezik a jogkivonat kiállításának időpontjával. Az Azure AD B2C ellenőrzi ezt az értéket, és elutasítja a jogkivonatot, ha a jogkivonat élettartama nem érvényes.

Az alábbi jogkivonat egy érvényes azonosító jogkivonat példája:

{
  "alg": "HS256",
  "typ": "JWT"
}.{
  "displayName": " John Smith",
  "userId": "john.s@contoso.com",
  "nbf": 1599482515,
  "exp": 1600087315,
  "iss": "https://localhost",
  "aud": "a489fc44-3cc0-4a78-92f6-e413cd853eae"
}

Protokoll

A Protokoll elem névattribútumát a következőre kell állítani None: . A IdTokenHint_ExtractClaims technikai profil protokollja például a következőNone:

<TechnicalProfile Id="IdTokenHint_ExtractClaims">
  <DisplayName> My ID Token Hint TechnicalProfile</DisplayName>
  <Protocol Name="None" />
  ...

A technikai profil meghívása egy vezénylési lépésből történik, amelynek típusa .GetClaims

<OrchestrationStep Order="1" Type="GetClaims" CpimIssuerTechnicalProfileReferenceId="IdTokenHint_ExtractClaims" />

Kimeneti jogcímek

Az OutputClaims elem a JWT-jogkivonatból kinyerendő jogcímek listáját tartalmazza. Előfordulhat, hogy le kell képeznie a házirendben meghatározott jogcím nevét a JWT-jogkivonatban meghatározott névre. A JWT-jogkivonat által nem visszaadott jogcímeket is felveheti, ha beállítja az DefaultValue attribútumot.

Metaadatok

A szimmetrikus kulcs használatakor az alábbi metaadatok relevánsak.

Attribútum Kötelező Leírás
Kibocsátó Igen Azonosítja a biztonsági jogkivonat-szolgáltatást (tokenkibocsátó). Ennek az értéknek meg kell egyeznie a iss JWT-jogkivonat jogcímen belüli jogcímével.
IdTokenAudience Igen A jogkivonat kívánt címzettjének azonosítása. A JWT-jogkivonat jogcímében szereplő jogcímnek aud meg kell egyeznie.

A következő metaadatok relevánsak aszimmetrikus kulcsok használatakor.

Attribútum Kötelező Leírás
METAADAT Igen Egy olyan URL-cím, amely egy tokenkibocsátó konfigurációs dokumentumára mutat, amely openID jól ismert konfigurációs végpontként is ismert.
Kibocsátó Nem Azonosítja a biztonsági jogkivonat-szolgáltatást (tokenkibocsátó). Ez az érték a metaadatokban konfigurált érték felülírására használható, és meg kell egyeznie a iss JWT-jogkivonat jogcímén belüli jogcímmel.
IdTokenAudience Nem A jogkivonat kívánt címzettjének azonosítása. A JWT-jogkivonat jogcímében szereplő jogcímnek aud meg kell egyeznie.

Fontos

A végpontoknak meg kell felelniük az Azure AD B2C biztonsági követelményeinek. A régebbi TLS-verziók és -titkosítások elavultak. További információ: Azure AD B2C TLS és titkosítási csomag követelményei.

Titkosítási kulcsok

Szimmetrikus kulcs használatakor a CryptographicKeys elem a következő attribútumot tartalmazza:

Attribútum Kötelező Leírás
client_secret Igen A JWT-jogkivonat aláírásának érvényesítéséhez használt titkosítási kulcs.

Útmutató

Jogkivonat kiállítása szimmetrikus kulcsokkal

1. lépés: Megosztott kulcs létrehozása

Hozzon létre egy kulcsot, amely a jogkivonat aláírására használható. Például a következő PowerShell-kóddal hozhat létre egy kulcsot.

$bytes = New-Object Byte[] 32
$rand = [System.Security.Cryptography.RandomNumberGenerator]::Create()
$rand.GetBytes($bytes)
$rand.Dispose()
$newClientSecret = [System.Convert]::ToBase64String($bytes)
$newClientSecret

Ez a kód létrehoz egy olyan titkos sztringet, mint a VK62QTn0m1hMcn0DQ3RPYDAr6yIiSvYgdRwjZtU5QhI=.

2. lépés: Az aláíró kulcs hozzáadása az Azure AD B2C-hez

A tokenkibocsátó által használt kulcsot az Azure AD B2C szabályzatkulcsaiban kell létrehozni.

  1. Jelentkezzen be az Azure Portalra.
  2. Ha több bérlőhöz is hozzáfér, a felső menüben válassza a Gépház ikont az Azure AD B2C-bérlőre való váltáshoz a Címtárak + előfizetések menüből.
  3. Az Azure Portalon keresse meg és válassza ki az Azure AD B2C-t.
  4. Az áttekintési lapon, a Szabályzatok területen válassza az Identity Experience Framework lehetőséget.
  5. Szabályzatkulcsok kiválasztása
  6. Válassza a Manuális lehetőséget.
  7. Névként használja a következőtIdTokenHintKey: .
    Előfordulhat, hogy az előtag B2C_1A_ automatikusan hozzáadódik.
  8. A Titkos kód mezőbe írja be a korábban létrehozott bejelentkezési kulcsot.
  9. Kulcshasználat esetén használja a titkosítást.
  10. Select Create.
  11. Ellenőrizze, hogy létrehozta-e a kulcsot B2C_1A_IdTokenHintKey.

3. lépés: Az azonosító jogkivonat hozzáadása technikai profilhoz

Az alábbi technikai profil ellenőrzi a jogkivonatot, és kinyeri a jogcímeket.

<ClaimsProvider>
  <DisplayName>My ID Token Hint ClaimsProvider</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="IdTokenHint_ExtractClaims">
      <DisplayName> My ID Token Hint TechnicalProfile</DisplayName>
      <Protocol Name="None" />
      <Metadata>
        <Item Key="IdTokenAudience">a489fc44-3cc0-4a78-92f6-e413cd853eae</Item>
        <Item Key="issuer">https://localhost</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="client_secret" StorageReferenceId="B2C_1A_IdTokenHintKey" />
      </CryptographicKeys>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="userId" />
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

4. lépés: A szabályzat előkészítése

Végezze el a szabályzat konfigurálását.

5. lépés: A kód előkészítése

A GitHub-minta egy ASP.NET webalkalmazás és konzolalkalmazás, amely szimmetrikus kulccsal aláírt azonosító jogkivonatot hoz létre.

Jogkivonat kiállítása aszimmetrikus kulcsokkal

Aszimmetrikus kulccsal a jogkivonat RSA-tanúsítványokkal van aláírva. Ez az alkalmazás egy OpenID Csatlakozás metaadat-végpontot és JSON-webkulcsokat (JWKs) tartalmazó végpontot üzemeltet, amelyet az Azure AD B2C használ az azonosító jogkivonat aláírásának ellenőrzéséhez.

A jogkivonat-kiállítónak a következő végpontokat kell megadnia:

  • /.well-known/openid-configuration - Jól ismert konfigurációs végpont a jogkivonattal kapcsolatos releváns információkkal, például a jogkivonat kiállítójának nevével és a JWK-végpontra mutató hivatkozással.
  • /.well-known/keys - a JSON webkulcs (JWK) végpontja a kulcs aláírásához használt nyilvános kulccsal (a tanúsítvány titkos kulcsával).

Tekintse meg a TokenMetadataController.cs .NET MVC-vezérlő mintáját.

1. lépés: Önaláírt tanúsítvány előkészítése

Ha még nem rendelkezik tanúsítvánnyal, ehhez az útmutatóhoz használhat önaláírt tanúsítványt. Windows rendszeren a PowerShell New-SelfSignedCertificate parancsmagjával hozhat létre tanúsítványt.

Futtassa ezt a PowerShell-parancsot egy önaláírt tanúsítvány létrehozásához. Módosítsa az argumentumot az alkalmazás és az -Subject Azure AD B2C-bérlő nevének megfelelően. A dátumot úgy is módosíthatja -NotAfter , hogy a tanúsítvány lejárata eltérő legyen.

New-SelfSignedCertificate `
    -KeyExportPolicy Exportable `
    -Subject "CN=yourappname.yourtenant.onmicrosoft.com" `
    -KeyAlgorithm RSA `
    -KeyLength 2048 `
    -KeyUsage DigitalSignature `
    -NotAfter (Get-Date).AddMonths(12) `
    -CertStoreLocation "Cert:\CurrentUser\My"

2. lépés: Az azonosító jogkivonat-emlékeztető technikai profiljának hozzáadása

Az alábbi technikai profil ellenőrzi a jogkivonatot, és kinyeri a jogcímeket. Módosítsa a metaadat-URI-t a tokenkibocsátó jól ismert konfigurációs végpontjához.

<ClaimsProvider>
  <DisplayName>My ID Token Hint ClaimsProvider</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="IdTokenHint_ExtractClaims">
      <DisplayName> My ID Token Hint TechnicalProfile</DisplayName>
      <Protocol Name="None" />
      <Metadata>
        <!-- Replace with your endpoint location -->
        <Item Key="METADATA">https://your-app.azurewebsites.net/.well-known/openid-configuration</Item>
        <Item Key="IdTokenAudience">your_optional_audience</Item>
        <!-- <Item Key="issuer">your_optional_token_issuer_override</Item> -->
      </Metadata>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="userId" />
      </OutputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

3. lépés: A szabályzat előkészítése

Végezze el a szabályzat konfigurálását.

4. lépés: A kód előkészítése

Ez a GitHub-minta ASP.NET webalkalmazás azonosító jogkivonatokat hoz létre, és az Azure AD B2C-ben a "id_token_hint" paraméter használatához szükséges metaadat-végpontokat tárolja.

A szabályzat konfigurálása

Szimmetrikus és aszimmetrikus megközelítések esetén a id_token_hint technikai profilt egy vezénylési lépésből hívjuk meg, amelynek GetClaims típusa és meg kell adnia a függő entitás házirendjének bemeneti jogcímeit.

  1. Adja hozzá a IdTokenHint_ExtractClaims technikai profilt a bővítményszabályzathoz.

  2. Első elemként adja hozzá a következő vezénylési lépést a felhasználói folyamathoz.

    <OrchestrationStep Order="1" Type="GetClaims" CpimIssuerTechnicalProfileReferenceId="IdTokenHint_ExtractClaims" />
    
  3. A függő entitás házirendjében ismételje meg ugyanazokat a bemeneti jogcímeket, amelyeket a IdTokenHint_ExtractClaims technikai profilban konfigurált. Például:

    <RelyingParty>
      <DefaultUserJourney ReferenceId="SignUp" />
      <TechnicalProfile Id="PolicyProfile">
        <DisplayName>PolicyProfile</DisplayName>
        <Protocol Name="OpenIdConnect" />
        <InputClaims>
          <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="userId" />
        </InputClaims>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="displayName" />
          <OutputClaim ClaimTypeReferenceId="givenName" />
          <OutputClaim ClaimTypeReferenceId="surname" />
          <OutputClaim ClaimTypeReferenceId="email" />
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
          <OutputClaim ClaimTypeReferenceId="identityProvider" />
        </OutputClaims>
        <SubjectNamingInfo ClaimType="sub" />
      </TechnicalProfile>
    </RelyingParty>
    

Az üzleti követelményektől függően előfordulhat, hogy jogkivonat-érvényesítést kell hozzáadnia, például ellenőriznie kell az e-mail-cím formátumát. Ehhez adjon hozzá olyan vezénylési lépéseket, amelyek meghívják a jogcímátalakítás technikai profilját. Emellett adjon hozzá egy önérvényesített műszaki profilt is, amely hibaüzenetet jelenít meg.

Jogkivonat létrehozása és aláírása

A GitHub-minták bemutatják, hogyan hozhat létre ilyen jogkivonatot egy JWT-ről, amelyet később lekérdezési sztringparaméterként id_token_hint küldtek. Az alábbi példa egy engedélyezési kérelemre id_token_hint paraméterrel

https://tenant-name.b2clogin.com/tenant-name.onmicrosoft.com/B2C_1A_signup_signin/oauth2/v2.0/authorize?client_id=63ba0d17-c4ba-47fd-89e9-31b3c2734339&nonce=defaultNonce&redirect_uri=https%3A%2F%2Fjwt.ms&scope=openid&response_type=id_token&prompt=login&id_token_hint=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkaXNwbGF5TmFtZSI6IiBKb2huIFNtaXRoIiwidXNlcklkIjoiam9obi5zQGNvbnRvc28uY29tIiwibmJmIjoxNTk5NDgyNTE1LCJleHAiOjE2MDAwODczMTUsImlzcyI6Imh0dHBzOi8vbG9jYWxob3N0IiwiYXVkIjoiYTQ4OWZjNDQtM2NjMC00YTc4LTkyZjYtZTQxM2NkODUzZWFlIn0.nPmLXydI83PQCk5lRBYUZRu_aX58pL1khahHyQuupig

Következő lépések