Azure Active Directory B2C'de erişim belirteci isteme

Erişim belirteci, API'lerinize verilen izinleri tanımlamak için Azure Active Directory B2C'de (Azure AD B2C) kullanabileceğiniz beyanlar içerir. Bir kaynak sunucusunu çağırmak için HTTP isteğinin bir erişim belirteci içermesi gerekir. Erişim belirteci Azure AD B2C'den gelen yanıtlarda access_token olarak gösterilir.

Bu makalede web uygulaması ve web API'si için nasıl erişim belirteci isteyebileceğiniz gösterilir. Azure AD B2C'deki belirteçler hakkında daha fazla bilgi için Azure Active Directory B2C'de belirteçlere genel bakış konusuna bakın.

Not

Web API zincirleri (Adına Bağlı) Azure AD B2C tarafından desteklenmez - Birçok mimaride, her ikisi de Azure AD B2C tarafından güvenliği sağlanan başka bir aşağı akış web API'sini çağırması gereken bir web API'si bulunur. Bu senaryo bir web API'si arka ucu olan ve başka bir hizmet çağıran istemcilerde yaygındır. Bu zincirli web API'si senaryosu, Kullanıcı Adına akışı olarak da bilinen OAuth 2.0 JWT Taşıyıcı Kimlik Bilgisi yetkisi kullanılarak desteklenebilir. Öte yandan Kullanıcı Adına akışı şu anda Azure AD B2C'de uygulanmamaktadır. Adına-Ad, Microsoft Entra kimliğine kayıtlı uygulamalar için çalışsa da, belirteçleri veren kiracıdan (Microsoft Entra Kimliği veya Azure AD B2C) bağımsız olarak Azure AD B2C'de kayıtlı uygulamalar için çalışmaz.

Ön koşullar

Kapsamlar

Kapsamlar korumalı kaynaklar üzerindeki izinleri yönetmek için bir yol sağlar. Erişim belirteci istenirken, istemci uygulamanın isteğin scope parametresinde istenen izinleri belirtmesi gerekir. Örneğin App ID URI'sihttps://contoso.onmicrosoft.com/api olan API'nin Kapsam Değeri olarak read belirtmek için, kapsam https://contoso.onmicrosoft.com/api/read olabilir.

Kapsamlar web API’si tarafından kapsam tabanlı erişim denetimi uygulamak için kullanılır. Örneğin web API'sinin kullanıcıları hem okuma hem de yazma veya yalnızca okuma erişimine sahip olabilir. Aynı istekte birden çok izin almak için, isteğin tek scope parametresine birden çok girdiyi boşluklarla ayırarak ekleyebilirsiniz.

Aşağıdaki örnekte URL'de kodu çözülmüş kapsamlar gösterilir:

scope=https://contoso.onmicrosoft.com/api/read openid offline_access

Aşağıdaki örnekte URL'de kodlanmış kapsamlar gösterilir:

scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2Fread%20openid%20offline_access

İstemci uygulamanıza sağlanandan daha fazla kapsam isterseniz, en az bir izin verildiğinde çağrı başarılı olur. Sonuçta elde edilen erişim belirtecinde scp beyanı yalnızca başarılı bir şekilde verilmiş izinlerle doldurulur.

OpenID Connect kapsamları

OpenID Connect standardı çeşitli özel kapsam değerlerini belirtir. Aşağıdaki kapsamlar kullanıcının profiline erişme iznini temsil eder:

  • openid - Kimlik belirteci ister.
  • offline_access - Auth Code akışlarını kullanarak yenileme belirteci ister.
  • 00000000-0000-0000-0000-00000000000 - Kapsam olarak istemci kimliğini kullanmak, uygulamanızın aynı istemci kimliğiyle temsil edilen kendi hizmetinize veya web API'nize karşı kullanılabilecek bir erişim belirtecini gerektirdiğini gösterir.

/authorize isteğindeki response_type parametresi token içeriyorsa, scope parametresi verilecek openid ve offline_access dışında en az bir kaynak kapsamı içermelidir. Aksi takdirde /authorize isteği başarısız olur.

Belirteç isteme

Erişim belirteci istemek için bir yetkilendirme kodu gerekir. Aşağıda, yetkilendirme kodu için uç noktaya yönelik /authorize bir istek örneği verilmiştir:

GET https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize?
client_id=<application-ID>
&nonce=anyRandomValue
&redirect_uri=https://jwt.ms
&scope=<application-ID-URI>/<scope-name>
&response_type=code

Sorgu dizesindeki değerleri aşağıdaki gibi değiştirin:

  • <tenant-name>- Azure AD B2C kiracınızın adı. Özel bir etki alanı kullanıyorsanız değerini gibi etki alanınızla contoso.comdeğiştirintenant-name.b2clogin.com.
  • <policy-name> - Özel ilkenizin veya kullanıcı akışınızın adı.
  • <application-ID> - Kullanıcı akışını desteklemek için kaydettiğiniz web uygulamasının uygulama tanımlayıcısı.
  • <application-ID-URI> - İstemci uygulamasının API dikey penceresini kullanıma sunma altında ayarladığınız uygulama tanımlayıcısı URI'sini.
  • <scope-name> - İstemci uygulamasının API dikey penceresini kullanıma sunma altına eklediğiniz kapsamın adı.
  • <redirect-uri> - İstemci uygulamayı kaydederken girdiğiniz Yeniden Yönlendirme URI'si.

İsteğin nasıl çalıştığını öğrenmek için isteği tarayıcınıza yapıştırın ve çalıştırın.

Bu, eylemi gerçekleştirdiğiniz akışın etkileşimli kısmıdır. Kullanıcı akışının iş akışını tamamlamanız istenir. Bu, kullanıcı adınızı ve parolanızı bir oturum açma formuna veya başka bir adıma girmeyi içerebilir. Tamamladığınız adımlar, kullanıcı akışının nasıl tanımlandığına bağlıdır.

Yetkilendirme kodunu içeren yanıt şu örneğe benzer olmalıdır:

https://jwt.ms/?code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...

Yetkilendirme kodunu başarıyla aldıktan sonra erişim belirteci istemek için kullanabilirsiniz. Parametreler HTTP POST isteğinin gövdesindedir:

POST <tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=<application-ID>
&scope=<application-ID-URI>/<scope-name>
&code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
&redirect_uri=https://jwt.ms
&client_secret=2hMG2-_:y12n10vwH...

Bu POST HTTP isteğini test etmek istiyorsanız , Microsoft PowerShell veya Postman gibi herhangi bir HTTP istemcisini kullanabilirsiniz.

Başarılı bir belirteç yanıtı şöyle görünür:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrN...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 3600,
    "expires_on": 1549651031,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11",
    "profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiJjNjRhNGY3ZC0zMDkxLTRjNzMtYTcyMi1hM2YwNjk0Z..."
}

Döndürülen erişim belirtecini incelemek için https://jwt.ms kullandığınızda aşağıdaki örnekte gösterilene benzer bir şey görmeniz gerekir:

{
  "typ": "JWT",
  "alg": "RS256",
  "kid": "X5eXk4xyojNFum1kl2Ytv8dl..."
}.{
  "iss": "https://contoso0926tenant.b2clogin.com/c64a4f7d-3091-4c73-a7.../v2.0/",
  "exp": 1549651031,
  "nbf": 1549647431,
  "aud": "f2a76e08-93f2-4350-833c-965...",
  "oid": "1558f87f-452b-4757-bcd1-883...",
  "sub": "1558f87f-452b-4757-bcd1-883...",
  "name": "David",
  "tfp": "B2C_1_signupsignin1",
  "nonce": "anyRandomValue",
  "scp": "read",
  "azp": "38307aee-303c-4fff-8087-d8d2...",
  "ver": "1.0",
  "iat": 1549647431
}.[Signature]

Sonraki adımlar