Azure Active Directory B2C'de erişim belirteci isteme

Önemli

1 Mayıs 2025 tarihinden itibaren Azure AD B2C artık yeni müşteriler için satın alınamayacak. SSS bölümünden daha fazla bilgi edinebilirsiniz.

Erişim belirteci, API'lerinize verilen izinleri tanımlamak için Azure Active Directory B2C'de (Azure AD B2C) kullanabileceğiniz talepleri 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 belirtilir.

Bu makale, bir web uygulaması ve web API'si için erişim belirtecini nasıl isteyeceğinizi gösterir. Azure AD B2C'deki belirteçler hakkında daha fazla bilgi için bkz. Azure Active Directory B2C'deki belirteçlere genel bakış.

Uyarı

Web API zincirleri (On-Behalf-Of) 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, arka uçta bir web API'si olan ve başka bir hizmeti çağıran istemcilerde yaygındır. Bu zincirlenmiş web API senaryosu, OAuth 2.0 JWT Bearer Belirteci Kredisi verme (On-Behalf-Of akışı olarak da bilinir) kullanılarak desteklenebilir. AncakBehalf-Of akışı şu anda Azure AD B2C'de uygulanmamıştır. On-Behalf-Of, Microsoft Entra ID'de kayıtlı uygulamalar için çalışsa da, belirteçleri veren kiracıdan (Microsoft Entra Id veya Azure AD B2C) bağımsız olarak Azure AD B2C'de kayıtlı uygulamalar için çalışmaz.

Önkoşullar

Kapsamlar

Kapsamlar, korumalı kaynaklara yönelik izinleri yönetmek için bir yol sağlar. Erişim belirteci istendiğinde, istemci uygulamasının isteğin kapsam parametresinde istenen izinleri belirtmesi gerekir. Örneğin, Uygulama Kimliği URI'sineread olan API için https://contoso.onmicrosoft.com/api belirtmek amacıyla kullanılacak olan kapsam https://contoso.onmicrosoft.com/api/read olacaktır.

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 erişimine sahip olabilir veya web API'sinin kullanıcıları yalnızca okuma erişimine sahip olabilir. Aynı istekte birden çok izin almak için, isteğin tek kapsam parametresine boşluklarla ayırarak birden çok girdi ekleyebilirsiniz.

Aşağıdaki örnekte URL'de kod çözülen kapsamlar gösterilmektedir:

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

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

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

İstemci uygulamanız için verilenden daha fazla kapsam isterseniz, en az bir izin verildiğinde çağrı başarılı olur. Sonuçta elde edilen erişim belirtecindeki scp talebi yalnızca başarıyla verilen izinlerle doldurulur.

OpenID Connect kapsamları

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

  • openid - Kimlik belirteci istemektedir.
  • offline_access - Kimlik Doğrulama Kodu akışlarını kullanarak yenileme belirteci talep eder.
  • 00000000-0000-0000-0000-0000000000 - 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 belirtecinin olması gerektiğini gösterir.

Eğer bir istekteki response_type parametresi /authorize içeriyorsa, token parametresinin ve openid dışında verilecek en az bir kaynak kapsamı içermesi gerekir. Aksi takdirde istek /authorize başarısız olur.

Jeton talep et

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, tenant-name.b2clogin.com kısmını etki alanınızla, örneğin contoso.com ile değiştirin.
  • <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'yi Kullanıma Sun paneli altında ayarladığınız uygulama tanımlayıcı URI'si.
  • <scope-name> - İstemci uygulamasının Bir API'yi Açığa Çıkarma bölümü altına eklediğiniz kapsamın adı.
  • <redirect-uri> - İstemci uygulamasını kaydederken girdiğiniz Yeniden Yönlendirme URI'sini .

İ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 bölümü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 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..."
}

komutunu kullanarak https://jwt.ms döndürülen erişim belirtecini incelerken aşağıdaki örneğe 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