Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ö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.
Başlamadan önce, ayarlamakta olduğunuz ilke türünü seçmek için bu sayfanın üst kısmındaki İlke türü seç seçicisini kullanın. Azure Active Directory B2C, kullanıcıların uygulamalarınızla nasıl etkileşim kurduğunu tanımlamak için iki yöntem sunar: önceden tanımlanmış kullanıcı akışları veya tam olarak yapılandırılabilir özel ilkeler aracılığıyla. Bu makalede gerekli adımlar her yöntem için farklıdır.
Azure Active Directory B2C'de (Azure AD B2C), kaynak sahibi parola kimlik bilgileri (ROPC) akışı OAuth standart kimlik doğrulama akışıdır. Bu akışta bağlı taraf olarak da bilinen bir uygulama belirteçler için geçerli kimlik bilgilerini değiştirir. Kimlik bilgileri bir kullanıcı kimliği ve parola içerir. Döndürülen belirteçler kimlik, erişim ve yenileme belirteçleridir.
Uyarı
ROPC akışını kullanmamanızı öneririz. Çoğu senaryoda daha güvenli alternatifler kullanılabilir ve önerilir. Bu akış, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca diğer daha güvenli akışlar uygun olmadığında kullanmalısınız.
ROPC akış notları
Azure Active Directory B2C'de (Azure AD B2C) aşağıdaki seçenekler desteklenir:
- Yerel İstemci: Kimlik doğrulaması sırasında kullanıcı etkileşimi, kod kullanıcı tarafı cihazda çalıştırıldığında gerçekleşir. Cihaz, Android ve iOS gibi yerel bir işletim sisteminde çalışan bir mobil uygulama olabilir.
- Genel istemci akışı: API çağrısında yalnızca bir uygulama tarafından toplanan kullanıcı kimlik bilgileri gönderilir. Uygulamanın kimlik bilgileri gönderilmez.
- Yeni talep ekleme: Kimlik belirteci içeriği, yeni talep eklemek için değiştirilebilir.
Aşağıdaki akışlar desteklenmez:
- Sunucudan sunucuya: Kimlik koruma sistemi, etkileşimin bir parçası olarak arayandan (yerel istemci) toplanan güvenilir bir IP adresine ihtiyaç duyar. Sunucu tarafı API çağrısında yalnızca sunucunun IP adresi kullanılır. Başarısız kimlik doğrulamalarının dinamik eşiği aşılırsa, kimlik koruma sistemi saldırgan olarak yinelenen bir IP adresi tanımlayabilir.
- Gizli istemci akışı: Uygulama istemci kimliği doğrulanır, ancak uygulama sırrı doğrulanmaz.
ROPC akışını kullanırken aşağıdaki sınırlamaları göz önünde bulundurun:
- Kullanıcı etkileşimi gerektiren kimlik doğrulama akışında herhangi bir kesinti olduğunda ROPC çalışmaz. Örneğin, parolanın süresi dolduğunda veya değiştirilmesi gerektiğinde, çok faktörlü kimlik doğrulaması gerekir veya oturum açma sırasında daha fazla bilgi toplanması gerektiğinde (örneğin, kullanıcı onayı).
- ROPC yalnızca yerel hesapları destekler. Kullanıcılar Microsoft, Google+, X, AD-FS veya Facebook gibi federasyon kimlik sağlayıcılarıyla oturum açamaz.
- Oturumumu açık tutma (KMSI) dahil olmak üzere Oturum Yönetimi geçerli değildir.
Bir uygulamayı kaydetme
Azure AD B2C kiracınıza bir uygulama kaydetmek için yeni birleşik Uygulama kayıtları deneyimimizi veya eski Uygulamalar (Eski) deneyimimizi kullanabilirsiniz. Yeni deneyim hakkında daha fazla bilgi edinin.
- Azure portalınaoturum açın.
- Azure AD B2C kiracınızı içeren dizini kullandığınızdan emin olun:
- Portal araç çubuğunda Dizinler + abonelikler simgesini seçin.
- Portal ayarlarında | Dizinler + abonelikler sayfası, Dizin adı listesinde Azure AD B2C dizininizi bulun ve ardından Değiştir'i seçin.
- Azure portalında Azure AD B2C'yi arayın ve seçin
- Uygulama kayıtlarıöğesini seçin, ve ardından Yeni kayıtöğesini seçin.
- Uygulama için bir Ad girin. Örneğin , ROPC_Auth_app.
- Diğer değerleri olduğu gibi bırakın ve kaydet'i seçin.
- Daha sonraki bir adımda kullanmak üzere Uygulama (istemci) kimliğini kaydedin.
- Yönet'in altında Kimlik Doğrulama'yı seçin.
- Yeni deneyimi deneyin (gösteriliyorsa) seçeneğini belirleyin.
- Gelişmiş ayarlar'ın altında ve Aşağıdaki mobil ve masaüstü akışlarını etkinleştir bölümünde Evet'i seçerek uygulamayı genel istemci olarak değerlendirin. RoPC akışı için bu ayar gereklidir.
- Kaydetseçeneğini seçin.
- Bildirim düzenleyicisini açmak için soldaki menüde Bildirim'i seçin.
-
oauth2AllowImplicitFlow özniteliğini true olarak ayarlayın. Öznitelik yoksa ekleyin:
"oauth2AllowImplicitFlow": true,
- Kaydetseçeneğini seçin.
Kaynak sahibi kullanıcı akışı oluşturun
- Azure portalında Azure AD B2C kiracınızın Dış Kimlik Kullanıcı Akışı Yöneticisi olarak oturum açın.
- Birden çok kiracıya erişiminiz varsa Azure AD B2C kiracınıza geçiş yapmak için Dizinler + abonelikler menüsünde, üstteki menüden Ayarlar simgesini seçin.
- Azure portalında Azure AD B2C'yi arayın ve seçin.
- Kullanıcı akışları'yı ve ardından Yeni kullanıcı akışı'yı seçin.
- Kaynak sahibi parola kimlik bilgilerini (ROPC) kullanarak oturum açın'ı seçin.
- Sürüm altında Önizleme'nin seçili olduğundan emin olun ve oluştur'u seçin.
- Kullanıcı akışı için ROPC_Auth gibi bir ad sağlayın.
- Uygulama talepleri'nin altında Daha fazla göster'i seçin.
- Uygulamanız için ihtiyacınız olan Görünen Ad, E-posta Adresi ve Kimlik Sağlayıcısı gibi uygulama taleplerini seçin.
- Tamam'ı ve ardından Oluştur'u seçin.
Önkoşul
Bunu yapmadıysanız, Active Directory B2C'de özel ilkeleri kullanmaya başlama bölümünde özel ilke başlangıç paketini kullanmayı öğrenin.
Kaynak sahibi ilkesi oluştur.
TrustFrameworkExtensions.xml dosyasını açın.
BuildingBlocks öğesinin altında ClaimsSchema öğesini bulun ve aşağıdaki talep türlerini ekleyin:
<ClaimsSchema> <ClaimType Id="logonIdentifier"> <DisplayName>User name or email address that the user can use to sign in</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="resource"> <DisplayName>The resource parameter passes to the ROPC endpoint</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="refreshTokenIssuedOnDateTime"> <DisplayName>An internal parameter used to determine whether the user should be permitted to authenticate again using their existing refresh token.</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="refreshTokensValidFromDateTime"> <DisplayName>An internal parameter used to determine whether the user should be permitted to authenticate again using their existing refresh token.</DisplayName> <DataType>string</DataType> </ClaimType> </ClaimsSchema>
ClaimsSchema'nın ardından, BuildingBlocks öğesine claimsTransformations öğesini ve alt öğelerini ekleyin:
<ClaimsTransformations> <ClaimsTransformation Id="CreateSubjectClaimFromObjectID" TransformationMethod="CreateStringClaim"> <InputParameters> <InputParameter Id="value" DataType="string" Value="Not supported currently. Use oid claim." /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="sub" TransformationClaimType="createdClaim" /> </OutputClaims> </ClaimsTransformation> <ClaimsTransformation Id="AssertRefreshTokenIssuedLaterThanValidFromDate" TransformationMethod="AssertDateTimeIsGreaterThan"> <InputClaims> <InputClaim ClaimTypeReferenceId="refreshTokenIssuedOnDateTime" TransformationClaimType="leftOperand" /> <InputClaim ClaimTypeReferenceId="refreshTokensValidFromDateTime" TransformationClaimType="rightOperand" /> </InputClaims> <InputParameters> <InputParameter Id="AssertIfEqualTo" DataType="boolean" Value="false" /> <InputParameter Id="AssertIfRightOperandIsNotPresent" DataType="boolean" Value="true" /> </InputParameters> </ClaimsTransformation> </ClaimsTransformations>
DisplayName içeren
Local Account SignIn
öğesini bulun ve aşağıdaki teknik profili ekleyin:<TechnicalProfile Id="ResourceOwnerPasswordCredentials-OAUTH2"> <DisplayName>Local Account SignIn</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">We can't seem to find your account</Item> <Item Key="UserMessageIfInvalidPassword">Your password is incorrect</Item> <Item Key="UserMessageIfOldPasswordUsed">Looks like you used an old password</Item> <Item Key="DiscoverMetadataByTokenIssuer">true</Item> <Item Key="ValidTokenIssuerPrefixes">https://sts.windows.net/</Item> <Item Key="METADATA">https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration</Item> <Item Key="authorization_endpoint">https://login.microsoftonline.com/{tenant}/oauth2/token</Item> <Item Key="response_types">id_token</Item> <Item Key="response_mode">query</Item> <Item Key="scope">email openid</Item> <Item Key="grant_type">password</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="logonIdentifier" PartnerClaimType="username" Required="true" DefaultValue="{OIDC:Username}"/> <InputClaim ClaimTypeReferenceId="password" Required="true" DefaultValue="{OIDC:Password}" /> <InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="password" /> <InputClaim ClaimTypeReferenceId="scope" DefaultValue="openid" /> <InputClaim ClaimTypeReferenceId="nca" PartnerClaimType="nca" DefaultValue="1" /> <InputClaim ClaimTypeReferenceId="client_id" DefaultValue="ProxyIdentityExperienceFrameworkAppId" /> <InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="IdentityExperienceFrameworkAppId" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid" /> <OutputClaim ClaimTypeReferenceId="userPrincipalName" PartnerClaimType="upn" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromObjectID" /> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" /> </TechnicalProfile>
client_idDefaultValue değerini önkoşul öğreticisinde oluşturduğunuz ProxyIdentityExperienceFramework uygulamasının Uygulama Kimliği ile değiştirin. Ardından resource_idDefaultValue değerini önkoşul öğreticisinde oluşturduğunuz IdentityExperienceFramework uygulamasının Uygulama Kimliği ile değiştirin.
ClaimsProviders öğesine teknik profilleriyle aşağıdaki ClaimsProvider öğelerini ekleyin:
<ClaimsProvider> <DisplayName>Azure Active Directory</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="AAD-UserReadUsingObjectId-CheckRefreshTokenDate"> <Metadata> <Item Key="Operation">Read</Item> <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="objectId" Required="true" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="refreshTokensValidFromDateTime" /> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="AssertRefreshTokenIssuedLaterThanValidFromDate" /> <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromObjectID" /> </OutputClaimsTransformations> <IncludeTechnicalProfile ReferenceId="AAD-Common" /> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <ClaimsProvider> <DisplayName>Session Management</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="SM-RefreshTokenReadAndSetup"> <DisplayName>Trustframework Policy Engine Refresh Token Setup Technical Profile</DisplayName> <Protocol Name="None" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="refreshTokenIssuedOnDateTime" /> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <ClaimsProvider> <DisplayName>Token Issuer</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="JwtIssuer"> <Metadata> <!-- Point to the redeem refresh token user journey--> <Item Key="RefreshTokenUserJourneyId">ResourceOwnerPasswordCredentials-RedeemRefreshToken</Item> </Metadata> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
TrustFrameworkPolicy öğesine bir UserJourneys öğesi ve alt öğeleri ekleyin:
<UserJourney Id="ResourceOwnerPasswordCredentials"> <PreserveOriginalAssertion>false</PreserveOriginalAssertion> <OrchestrationSteps> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="ResourceOwnerFlow" TechnicalProfileReferenceId="ResourceOwnerPasswordCredentials-OAUTH2" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney> <UserJourney Id="ResourceOwnerPasswordCredentials-RedeemRefreshToken"> <PreserveOriginalAssertion>false</PreserveOriginalAssertion> <OrchestrationSteps> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="RefreshTokenSetupExchange" TechnicalProfileReferenceId="SM-RefreshTokenReadAndSetup" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="CheckRefreshTokenDateFromAadExchange" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId-CheckRefreshTokenDate" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
Azure AD B2C kiracınızdaki Özel İlkeler sayfasında İlkeyi Karşıya Yükle seçeneğini seçin.
İlkeyi varsa üzerine yazmayı etkinleştirin ve TrustFrameworkExtensions.xml dosyasına göz atıp seçin.
Yükle'yi seçin.
Bağlı taraf dosyası oluştur.
Ardından, oluşturduğunuz kullanıcı yolculuğunu başlatan bağlı olan taraf dosyasını güncelleştirin:
Çalışma dizininizde SignUpOrSignin.xml dosyasının bir kopyasını oluşturun ve ROPC_Auth.xmlolarak yeniden adlandırın.
Yeni dosyayı açın ve TrustFrameworkPolicy için PolicyId özniteliğinin değerini benzersiz bir değerle değiştirin. İlke kimliği, ilkenizin adıdır. Örneğin , B2C_1A_ROPC_Auth.
DefaultUserJourney içindeki ReferenceId özniteliğinin değerini olarak
ResourceOwnerPasswordCredentials
değiştirin.OutputClaims öğesini yalnızca aşağıdaki talepleri içerecek şekilde değiştirin:
<OutputClaim ClaimTypeReferenceId="sub" /> <OutputClaim ClaimTypeReferenceId="objectId" /> <OutputClaim ClaimTypeReferenceId="displayName" DefaultValue="" /> <OutputClaim ClaimTypeReferenceId="givenName" DefaultValue="" /> <OutputClaim ClaimTypeReferenceId="surname" DefaultValue="" />
Azure AD B2C kiracınızdaki Özel İlkeler sayfasında İlkeyi Karşıya Yükle seçeneğini seçin.
varsa ilkenin üzerine yaz'ı etkinleştirin ve ardındanROPC_Auth.xml dosyasına göz atın ve seçin.
Yükle'yi seçin.
ROPC akışını test edin
Bir API çağrısı oluşturmak için sık kullandığınız API geliştirme uygulamasını kullanın ve ilkenizde hata ayıklamak için yanıtı gözden geçirin. POST isteğinin gövdesi olarak aşağıdaki bilgilerle bu örneğe benzer bir çağrı oluşturun:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1A_ROPC_Auth/oauth2/v2.0/token
-
<tenant-name>
yerine Azure AD B2C kiracınızın adını yazın. - Kaynak sahibi parola kimlik bilgileri ilkenizin tam adıyla
B2C_1A_ROPC_Auth
değerini değiştirin.
Anahtar | Değer |
---|---|
kullanıcı adı | user-account |
şifre | password1 |
izin_tipi | şifre |
kapsam | openid application-id çevrimdışı erişim |
müşteri_kimlik | application-id |
yanıt_türü | belirteç id_token |
-
user-account
ile kiracınızdaki bir kullanıcı hesabının adını yerine koyun. - yerine
password1
kullanıcı hesabının parolasını yazın. -
application-id
değerini ROPC_Auth_app kaydındaki Uygulama Kimliği ile değiştirin. - Offline_access isteğe bağlıdır, yenileme jetonu almak istiyorsanız.
Gerçek POST isteği aşağıdaki örneğe benzer:
POST /<tenant-name>.onmicrosoft.com/B2C_1A_ROPC_Auth/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded
username=contosouser.outlook.com.ws&password=Passxword1&grant_type=password&scope=openid+00001111-aaaa-2222-bbbb-3333cccc4444+offline_access&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&response_type=token+id_token
Çevrimdışı erişim ile başarılı bir yanıt aşağıdaki örneğe benzer:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik9YQjNhdTNScWhUQWN6R0RWZDM5djNpTmlyTWhqN2wxMjIySnh6TmgwRlki...",
"token_type": "Bearer",
"expires_in": "3600",
"refresh_token": "eyJraWQiOiJacW9pQlp2TW5pYVc2MUY0TnlfR3REVk1EVFBLbUJLb0FUcWQ1ZWFja1hBIiwidmVyIjoiMS4wIiwiemlwIjoiRGVmbGF0ZSIsInNlciI6Ij...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik9YQjNhdTNScWhUQWN6R0RWZDM5djNpTmlyTWhqN2wxMjIySnh6TmgwRlki..."
}
Yenileme belirtecini kullan
Burada gösterilen gibi bir POST çağrısı oluşturma. Aşağıdaki tabloda yer alan bilgileri isteğin gövdesi olarak kullanın:
https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/B2C_1A_ROPC_Auth/oauth2/v2.0/token
-
<tenant-name>
yerine Azure AD B2C kiracınızın adını yazın. - Kaynak sahibi parola kimlik bilgileri ilkenizin tam adıyla
B2C_1A_ROPC_Auth
değerini değiştirin.
Anahtar | Değer |
---|---|
izin_tipi | yenileme_tokenu |
yanıt_türü | kimlik belirteci (id_token) |
müşteri_kimlik | application-id |
kaynak | application-id |
yenileme_tokenu | refresh-token |
-
application-id
değerini ROPC_Auth_app kaydındaki Uygulama Kimliği ile değiştirin. -
refresh-token
değerini, önceki yanıtta geri gönderilen refresh_token ile değiştirin.
Başarılı bir yanıt aşağıdaki örneğe benzer:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQndhT...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrNHh5b2pORnVtMWtsMll0djhkbE5QNC1jNTdkTzZRR1RWQn...",
"token_type": "Bearer",
"not_before": 1533672990,
"expires_in": 3600,
"expires_on": 1533676590,
"resource": "bef2222d56-552f-4a5b-b90a-1988a7d634c3",
"id_token_expires_in": 3600,
"profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiI1MTZmYzA2NS1mZjM2LTRiOTMtYWE1YS1kNmVlZGE3Y2JhYzgiLCJzdWIiOm51bGwsIm5hbWUiOiJEYXZpZE11IiwicHJlZmVycmVkX3VzZXJuYW1lIjpudWxsLCJpZHAiOiJMb2NhbEFjY291bnQifQ",
"refresh_token": "eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMCIsInppcCI6IkRlZmxhdGUiLCJzZXIiOiIxLjAi...",
"refresh_token_expires_in": 1209600
}
Sorun giderme
Sağlanan uygulama 'OAuth' Örtük akışına izin verecek şekilde yapılandırılmamış
- Belirti - ROPC akışını çalıştırır ve şu iletiyi alırsınız: AADB2C90057: Sağlanan uygulama 'OAuth' Örtük akışına izin verecek şekilde yapılandırılmamış.
- Olası nedenler - Uygulamanız için örtük akışa izin verilmez.
-
Çözüm: Azure AD B2C'de uygulama kaydınızı oluştururken uygulama bildirimini el ile düzenlemeniz ve özelliğinin
oauth2AllowImplicitFlow
değerini olaraktrue
ayarlamanız gerekir. Özelliği yapılandırdıktan sonra, değişikliğinoauth2AllowImplicitFlow
geçerlilik kazanması birkaç dakika (genellikle beşten fazla değildir) sürebilir.
Yerel SDK veya App-Auth kullanma
Azure AD B2C, genel istemci kaynağı sahibi parola kimlik bilgileri için OAuth 2.0 standartlarını karşılar ve çoğu istemci SDK'sıyla uyumlu olmalıdır. En son bilgiler için bkz. OAuth 2.0 için Yerel Uygulama SDK'sı ve modern en iyi yöntemleri uygulayan OpenID Connect.