OAuth 2.0 kod verme akışını kullanarak Azure Active Directory web uygulamalarına erişimi yetkilendirmeAuthorize access to Azure Active Directory web applications using the OAuth 2.0 code grant flow

Not

Sunucuya çağırmayı planladığınız kaynağı söylemezseniz, sunucu bu kaynak için koşullu erişim ilkelerini tetiklemez.If you don't tell the server what resource you plan to call, then the server will not trigger the Conditional Access policies for that resource. Bu nedenle MFA tetikleyicisine sahip olmak için, URL 'nize bir kaynak eklemeniz gerekir.So in order to have MFA trigger, you will need to include a resource in your URL.

Azure Active Directory (Azure AD), Azure AD kiracınızdaki Web uygulamalarına ve Web API 'Lerine erişim yetkisi verme olanağı sağlamak için OAuth 2,0 kullanır.Azure Active Directory (Azure AD) uses OAuth 2.0 to enable you to authorize access to web applications and web APIs in your Azure AD tenant. Bu kılavuz dilden bağımsızdır ve Açık kaynaklı kitaplıklarımızınHIÇBIRINI kullanmadan http iletilerinin nasıl gönderileceğini ve alınacağını açıklar.This guide is language independent, and describes how to send and receive HTTP messages without using any of our open-source libraries.

OAuth 2,0 yetkilendirme kodu akışı, oauth 2,0 belirtiminin 4,1 bölümündeaçıklanmaktadır.The OAuth 2.0 authorization code flow is described in section 4.1 of the OAuth 2.0 specification. Web uygulamaları ve yerel olarak yüklenen uygulamalar dahil olmak üzere çoğu uygulama türünde kimlik doğrulama ve yetkilendirme gerçekleştirmek için kullanılır.It is used to perform authentication and authorization in most application types, including web apps and natively installed apps.

Uygulamanızı AD kiracınıza kaydetmeRegister your application with your AD tenant

İlk olarak, Azure Active Directory (Azure AD) kiracınızı kullanarak uygulamanızı kaydedin.First, register your application with your Azure Active Directory (Azure AD) tenant. Bu, uygulamanıza bir Uygulama Kimliği verir ve uygulamanızın belirteçleri alabilmesini sağlar.This will give you an Application ID for your application, as well as enable it to receive tokens.

  1. Azure portalında oturum açın.Sign in to the Azure portal.

  2. Sayfanın sağ üst köşesindeki hesabınızı seçerek Azure AD kiracınızı seçin ve ardından Dizin gezintisini Değiştir ' i seçip uygun kiracıyı seçin.Choose your Azure AD tenant by selecting your account in the top right corner of the page, followed by selecting the Switch Directory navigation and then selecting the appropriate tenant.

    • Hesabınız kapsamında yalnızca bir Azure AD kiracınız varsa veya uygun Azure AD kiracısını zaten seçtiyseniz bu adımı atlayın.Skip this step if you only have one Azure AD tenant under your account, or if you've already selected the appropriate Azure AD tenant.
  3. Azure portal, araması yapın ve Azure Active Directoryseçin.In the Azure portal, search for and select Azure Active Directory.

  4. Azure Active Directory sol menüsünde uygulama kayıtları' nı ve ardından Yeni kayıt' yi seçin.In the Azure Active Directory left menu, select App Registrations, and then select New registration.

  5. Komut istemlerini izleyin ve yeni bir uygulama oluşturun.Follow the prompts and create a new application. Bu öğretici için bir Web uygulaması ya da bir genel istemci (mobil & Masaüstü) uygulaması olsa da, Web uygulamaları veya genel istemci uygulamalarına yönelik özel örnekler isterseniz hızlıbaşlangıçlarımızı inceleyin.It doesn't matter if it is a web application or a public client (mobile & desktop) application for this tutorial, but if you'd like specific examples for web applications or public client applications, check out our quickstarts.

    • Ad, uygulamanın adıdır ve uygulamanızı son kullanıcılara açıklar.Name is the application name and describes your application to end users.
    • Desteklenen hesap türlerialtında, herhangi bir kurumsal dizin ve kişisel Microsoft hesabında hesaplar' ı seçin.Under Supported account types, select Accounts in any organizational directory and personal Microsoft accounts.
    • Yeniden yönlendirme URI 'sisağlayın.Provide the Redirect URI. Web uygulamaları için, bu, kullanıcıların oturum açabileceği uygulamanızın temel URL 'sidir.For web applications, this is the base URL of your app where users can sign in. Örneğin, http://localhost:12345.For example, http://localhost:12345. Ortak istemci (mobil & Masaüstü) için Azure AD, belirteç yanıtlarını döndürmek için bunu kullanır.For public client (mobile & desktop), Azure AD uses it to return token responses. Uygulamanıza özgü bir değer girin.Enter a value specific to your application. Örneğin, http://MyFirstAADApp.For example, http://MyFirstAADApp.
  6. Kaydı tamamladıktan sonra, Azure AD, uygulamanıza benzersiz bir istemci tanımlayıcısı ( uygulama kimliği) atayacaktır.Once you've completed registration, Azure AD will assign your application a unique client identifier (the Application ID). Sonraki bölümlerde bu değere ihtiyacınız olduğundan uygulama sayfasından kopyalayın.You need this value in the next sections, so copy it from the application page.

  7. Uygulamanızı Azure portal bulmak için uygulama kayıtları' i seçin ve ardından tüm uygulamaları görüntüle' yi seçin.To find your application in the Azure portal, select App registrations, and then select View all applications.

OAuth 2,0 yetkilendirme akışıOAuth 2.0 authorization flow

Yüksek düzeyde, bir uygulamanın tüm yetkilendirme akışı şuna benzer bir bit:At a high level, the entire authorization flow for an application looks a bit like this:

OAuth kimlik doğrulama kod akışı

Yetkilendirme kodu isteRequest an authorization code

Yetkilendirme kodu akışı, kullanıcıyı /authorize uç noktasına yönlendiren istemciyle başlar.The authorization code flow begins with the client directing the user to the /authorize endpoint. Bu istekte istemci, kullanıcıdan almaları gereken izinleri gösterir.In this request, the client indicates the permissions it needs to acquire from the user. Azure portal Uygulama kayıtları > uç noktaları ' nı seçerek kiracınızın OAuth 2,0 yetkilendirme uç noktasını alabilirsiniz.You can get the OAuth 2.0 authorization endpoint for your tenant by selecting App registrations > Endpoints in the Azure portal.

// Line breaks for legibility only

https://login.microsoftonline.com/{tenant}/oauth2/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%3A12345
&response_mode=query
&resource=https%3A%2F%2Fservice.contoso.com%2F
&state=12345
ParametreParameter AçıklamaDescription
Kiracıtenant Gereklirequired İsteğin yolundaki {tenant} değeri, uygulamada kimlerin oturum açmasını denetlemek için kullanılabilir.The {tenant} value in the path of the request can be used to control who can sign into the application. İzin verilen değerler, kiracı tanımlayıcılarıdır; Örneğin, 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 veya contoso.onmicrosoft.com ya da kiracıdan bağımsız belirteçler için commonThe allowed values are tenant identifiers, for example, 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 or contoso.onmicrosoft.com or common for tenant-independent tokens
client_idclient_id Gereklirequired Azure AD ile kaydettiğinizde uygulamanıza atanan uygulama KIMLIĞI.The Application ID assigned to your app when you registered it with Azure AD. Bunu Azure portalında bulabilirsiniz.You can find this in the Azure Portal. Hizmetler kenar çubuğunda Azure Active Directory ' a tıklayın, uygulama kayıtları' a tıklayın ve uygulamayı seçin.Click Azure Active Directory in the services sidebar, click App registrations, and choose the application.
response_typeresponse_type Gereklirequired , Yetkilendirme kodu akışı için code içermelidir.Must include code for the authorization code flow.
isteğinderedirect_uri Önerilenrecommended Uygulamanızın kimlik doğrulama yanıtlarının gönderilebileceği ve alınabileceği, uygulamanızın redirect_uri 'ı.The redirect_uri of your app, where authentication responses can be sent and received by your app. Portalın, URL kodlamalı olması dışında, portala kaydettiğiniz redirect_uris biriyle tam olarak eşleşmesi gerekir.It must exactly match one of the redirect_uris you registered in the portal, except it must be url encoded. Yerel & Mobile Apps için urn:ietf:wg:oauth:2.0:oob varsayılan değerini kullanmanız gerekir.For native & mobile apps, you should use the default value of urn:ietf:wg:oauth:2.0:oob.
response_moderesponse_mode Seçimoptional Elde edilen belirteci uygulamanıza geri göndermek için kullanılması gereken yöntemi belirtir.Specifies the method that should be used to send the resulting token back to your app. query, fragmentveya form_postolabilir.Can be query, fragment, or form_post. query, yeniden yönlendirme URI 'niz üzerinde bir sorgu dizesi parametresi olarak kodu sağlar.query provides the code as a query string parameter on your redirect URI. Örtük akışı kullanarak bir KIMLIK belirteci isteğinde bulunduğsanız, OpenID belirtimindebelirtilen şekilde query kullanamazsınız. Yalnızca kod isteğinde bulunduğsanız query, fragmentveya form_postkullanabilirsiniz.If you're requesting an ID token using the implicit flow, you cannot use query as specified in the OpenID spec. If you're requesting just the code, you can use query, fragment, or form_post. form_post yeniden yönlendirme URI 'nize kodu içeren bir GÖNDERI yürütür.form_post executes a POST containing the code to your redirect URI. Varsayılan değer bir kod akışı için query.The default is query for a code flow.
durumstate Önerilenrecommended İstekte bulunan, belirteç yanıtında de döndürülen bir değer.A value included in the request that is also returned in the token response. Rastgele oluşturulan benzersiz bir değer genellikle siteler arası istek sahteciliği saldırılarını önlemekiçin kullanılır.A randomly generated unique value is typically used for preventing cross-site request forgery attacks. Durum Ayrıca, kullanıcının uygulamadaki durumu hakkında bilgi kodlamak için kullanılır; Örneğin, bulunan sayfa veya görünüm gibi kimlik doğrulama isteği gerçekleştirilmeden önce.The state is also used to encode information about the user's state in the app before the authentication request occurred, such as the page or view they were on.
Kaynakresource Önerilenrecommended Hedef Web API 'sinin (güvenli kaynak) uygulama KIMLIĞI URI 'SI.The App ID URI of the target web API (secured resource). Uygulama KIMLIĞI URI 'sini bulmak için Azure portalında Azure Active Directory' a tıklayın, uygulama kayıtları' na tıklayın, uygulamanın Ayarlar sayfasını açın ve ardından Özellikler' e tıklayın.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties. Ayrıca, https://graph.microsoft.com gibi bir dış kaynak da olabilir.It may also be an external resource like https://graph.microsoft.com. Bu, yetkilendirme ya da belirteç isteklerinden birinde gereklidir.This is required in one of either the authorization or token requests. Daha az kimlik doğrulama isteminin, kullanıcıdan onay aldığından emin olmak için bunu yetkilendirme isteğine yerleştirdiğinden emin olmak için.To ensure fewer authentication prompts place it in the authorization request to ensure consent is received from the user.
scopescope LIPignored V1 Azure AD uygulamaları için kapsamlar, Azure portalında uygulamalar ayarlarıaltında, gerekli izinleraltında statik olarak yapılandırılmalıdır.For v1 Azure AD apps, scopes must be statically configured in the Azure Portal under the applications Settings, Required Permissions.
istemeprompt Seçimoptional Gerekli kullanıcı etkileşiminin türünü belirtin.Indicate the type of user interaction that is required.

Geçerli değerler şunlardır:Valid values are:

oturum açma: kullanıcıdan yeniden kimlik doğrulaması yapması istenir.login: The user should be prompted to reauthenticate.

select_account: kullanıcıdan bir hesap seçmesi ve çoklu oturum açmayı kesintiye uğratma istenir.select_account: The user is prompted to select an account, interrupting single sign on. Kullanıcı, mevcut bir oturum açmış hesabı seçebilir, hatırlanan bir hesap için kimlik bilgilerini girebilir veya tamamen farklı bir hesap kullanmayı tercih edebilir.The user may select an existing signed-in account, enter their credentials for a remembered account, or choose to use a different account altogether.

onay: Kullanıcı izni verildi, ancak güncelleştirilmesi gerekiyor.consent: User consent has been granted, but needs to be updated. Kullanıcıdan onay girmesi istenir.The user should be prompted to consent.

admin_consent: bir yöneticinin kuruluşlarındaki tüm kullanıcılar adına onay girmeleri isteniradmin_consent: An administrator should be prompted to consent on behalf of all users in their organization

login_hintlogin_hint Seçimoptional Kullanıcı adının bir süre önce bilinerek Kullanıcı için oturum açma sayfasının Kullanıcı adı/e-posta adresi alanını önceden doldurmanız için kullanılabilir.Can be used to pre-fill the username/email address field of the sign-in page for the user, if you know their username ahead of time. Genellikle uygulamalar bu parametreyi yeniden oluşturma sırasında kullanır ve preferred_username talebini kullanarak önceki bir oturum açma işleminden zaten Kullanıcı adını ayıklamış olur.Often apps use this parameter during reauthentication, having already extracted the username from a previous sign-in using the preferred_username claim.
domain_hintdomain_hint Seçimoptional Kullanıcının oturum açmak için kullanması gereken kiracı veya etki alanı hakkında bir ipucu sağlar.Provides a hint about the tenant or domain that the user should use to sign in. Domain_hint değeri, kiracının kayıtlı bir etki alanıdır.The value of the domain_hint is a registered domain for the tenant. Kiracı şirket içi bir dizine federe ise, AAD belirtilen kiracı federasyon sunucusuna yeniden yönlendirir.If the tenant is federated to an on-premises directory, AAD redirects to the specified tenant federation server.
code_challenge_methodcode_challenge_method Önerilenrecommended code_challenge parametresi için code_verifier kodlamak için kullanılan yöntem.The method used to encode the code_verifier for the code_challenge parameter. plain veya S256biri olabilir.Can be one of plain or S256. Dışlanmazsa, code_challenge dahil edildikçe code_challenge düz metin olarak kabul edilir.If excluded, code_challenge is assumed to be plaintext if code_challenge is included. Azure AAD v 1.0 hem plain hem de S256 destekler.Azure AAD v1.0 supports both plain and S256. Daha fazla bilgi için bkz. Pkce RFC.For more information, see the PKCE RFC.
code_challengecode_challenge Önerilenrecommended Yerel veya genel bir istemciden kod değişimi (PKCE) için kanıt anahtarı aracılığıyla yetkilendirme kodu yetkisini güvenli hale getirmek için kullanılır.Used to secure authorization code grants via Proof Key for Code Exchange (PKCE) from a native or public client. code_challenge_method varsa gereklidir.Required if code_challenge_method is included. Daha fazla bilgi için bkz. Pkce RFC.For more information, see the PKCE RFC.

Not

Kullanıcı bir kuruluşun parçasıysa, kuruluşun yöneticisi kullanıcının adına izin verebilir veya reddedebilir veya kullanıcının izin vermesini sağlayabilir.If the user is part of an organization, an administrator of the organization can consent or decline on the user's behalf, or permit the user to consent. Kullanıcıya yalnızca yönetici izin veriyorsa izin verilir.The user is given the option to consent only when the administrator permits it.

Bu noktada, kullanıcıdan Azure portalında uygulama tarafından istenen izinlerin kimlik bilgilerini ve onayını girmesi istenir.At this point, the user is asked to enter their credentials and consent to the permissions requested by the app in the Azure Portal. Kullanıcı kimlik doğrulamasından ve onay vermiş olduktan sonra, Azure AD, kod ile talebinizdeki redirect_uri adreste uygulamanıza bir yanıt gönderir.Once the user authenticates and grants consent, Azure AD sends a response to your app at the redirect_uri address in your request with the code.

Başarılı yanıtSuccessful response

Başarılı bir yanıt şöyle görünebilir:A successful response could look like this:

GET  HTTP/1.1 302 Found
Location: http://localhost:12345/?code= AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA&session_state=7B29111D-C220-4263-99AB-6F6E135D75EF&state=D79E5777-702E-4260-9A62-37F75FF22CCE
ParametreParameter AçıklamaDescription
admin_consentadmin_consent Bir yönetici bir izin isteği istemine kabul etmişse değer true 'dur.The value is True if an administrator consented to a consent request prompt.
Kodudurcode Uygulamanın istediği yetkilendirme kodu.The authorization code that the application requested. Uygulama, hedef kaynak için bir erişim belirteci istemek üzere yetkilendirme kodunu kullanabilir.The application can use the authorization code to request an access token for the target resource.
session_statesession_state Geçerli Kullanıcı oturumunu tanımlayan benzersiz bir değer.A unique value that identifies the current user session. Bu değer bir GUID 'dir, ancak incelenmesi gerekmeden geçirilen donuk bir değer olarak değerlendirilmelidir.This value is a GUID, but should be treated as an opaque value that is passed without examination.
durumstate İsteğe bir durum parametresi dahil edilir, yanıtta aynı değer görünmelidir.If a state parameter is included in the request, the same value should appear in the response. Bu, uygulamanın istek ve yanıt içindeki durum değerlerinin yanıtı kullanmadan önce özdeş olduğunu doğrulaması için iyi bir uygulamadır.It's a good practice for the application to verify that the state values in the request and response are identical before using the response. Bu, istemciye karşı siteler arası Istek forgery (CSRF) saldırılarını algılamaya yardımcı olur.This helps to detect Cross-Site Request Forgery (CSRF) attacks against the client.

Hata yanıtıError response

Ayrıca, uygulamanın bunları uygun şekilde işleyebilmesi için redirect_uri hata yanıtları da gönderilebilir.Error responses may also be sent to the redirect_uri so that the application can handle them appropriately.

GET http://localhost:12345/?
error=access_denied
&error_description=the+user+canceled+the+authentication
ParametreParameter AçıklamaDescription
errorerror OAuth 2,0 yetkilendirme çerçevesinin5,2 bölümünde tanımlanan bir hata kodu değeri.An error code value defined in Section 5.2 of the OAuth 2.0 Authorization Framework. Sonraki tabloda, Azure AD 'nin döndürdüğü hata kodları açıklanmaktadır.The next table describes the error codes that Azure AD returns.
error_descriptionerror_description Hatanın daha ayrıntılı bir açıklaması.A more detailed description of the error. Bu ileti, son kullanıcı kullanımı için tasarlanmamıştır.This message is not intended to be end-user friendly.
durumstate Durum değeri, istekte gönderilen ve siteler arası istek sahteciliği (CSRF) saldırılarını önlemeye yönelik yanıtta döndürülen rastgele oluşturulmuş bir yeniden kullanılabilir olmayan değerdir.The state value is a randomly generated non-reused value that is sent in the request and returned in the response to prevent cross-site request forgery (CSRF) attacks.

Yetkilendirme uç noktası hataları için hata kodlarıError codes for authorization endpoint errors

Aşağıdaki tabloda hata yanıtının error parametresinde döndürülebilecek çeşitli hata kodları açıklanmaktadır.The following table describes the various error codes that can be returned in the error parameter of the error response.

Hata koduError Code AçıklamaDescription İstemci eylemiClient Action
invalid_requestinvalid_request Eksik gerekli bir parametre gibi protokol hatası.Protocol error, such as a missing required parameter. İsteği onarın ve yeniden gönderin.Fix and resubmit the request. Bu bir geliştirme hatasıdır ve genellikle ilk test sırasında yakalanır.This is a development error, and is typically caught during initial testing.
unauthorized_clientunauthorized_client İstemci uygulamasının bir yetkilendirme kodu istemesine izin verilmiyor.The client application is not permitted to request an authorization code. Bu durum genellikle istemci uygulaması Azure AD 'ye kaydedilmediğinde veya kullanıcının Azure AD kiracısına eklenmediğinde oluşur.This usually occurs when the client application is not registered in Azure AD or is not added to the user's Azure AD tenant. Uygulama kullanıcıya uygulamayı yükleme ve Azure AD 'ye ekleme yönergesini isteyebilir.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
access_deniedaccess_denied Kaynak sahibi reddedildi onayıResource owner denied consent İstemci uygulaması, kullanıcıya Kullanıcı tarafından bağlanmadığı takdirde devam edemediği konusunda bildirimde bulunabilir.The client application can notify the user that it cannot proceed unless the user consents.
unsupported_response_typeunsupported_response_type Yetkilendirme sunucusu istekteki yanıt türünü desteklemiyor.The authorization server does not support the response type in the request. İsteği onarın ve yeniden gönderin.Fix and resubmit the request. Bu bir geliştirme hatasıdır ve genellikle ilk test sırasında yakalanır.This is a development error, and is typically caught during initial testing.
server_errorserver_error Sunucu beklenmeyen bir hatayla karşılaştı.The server encountered an unexpected error. İsteği yeniden deneyin.Retry the request. Bu hatalar geçici koşullardan kaynaklanabilir.These errors can result from temporary conditions. İstemci uygulaması, isteği geçici bir hata nedeniyle geciktirildiği kullanıcıya açıklayabilir.The client application might explain to the user that its response is delayed due to a temporary error.
temporarily_unavailabletemporarily_unavailable Sunucu, isteği işlemek için geçici olarak çok meşgul.The server is temporarily too busy to handle the request. İsteği yeniden deneyin.Retry the request. İstemci uygulaması, yanıtı, geçici bir durum nedeniyle geciktiğinde kullanıcıya açıklayabilir.The client application might explain to the user that its response is delayed due to a temporary condition.
invalid_resourceinvalid_resource Hedef kaynak geçersiz, çünkü mevcut değil, Azure AD bu dosyayı bulamıyor veya doğru şekilde yapılandırılmamış.The target resource is invalid because it does not exist, Azure AD cannot find it, or it is not correctly configured. Bu, varsa kaynağın kiracıda yapılandırılmamış olduğunu gösterir.This indicates the resource, if it exists, has not been configured in the tenant. Uygulama kullanıcıya uygulamayı yükleme ve Azure AD 'ye ekleme yönergesini isteyebilir.The application can prompt the user with instruction for installing the application and adding it to Azure AD.

Erişim belirteci istemek için yetkilendirme kodunu kullanmaUse the authorization code to request an access token

Artık bir yetkilendirme kodu edindiniz ve Kullanıcı tarafından izin verildiğinden, /token uç noktasına bir POST isteği göndererek istenen kaynağa erişim belirtecinin kodunu kullanabilirsiniz:Now that you've acquired an authorization code and have been granted permission by the user, you can redeem the code for an access token to the desired resource, by sending a POST request to the /token endpoint:

// Line breaks for legibility only

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrqqf_ZT_p5uEAEJJ_nZ3UmphWygRNy2C3jJ239gV_DBnZ2syeg95Ki-374WHUP-i3yIhv5i-7KU2CEoPXwURQp6IVYMw-DjAOzn7C3JCu5wpngXmbZKtJdWmiBzHpcO2aICJPu1KvJrDLDP20chJBXzVYJtkfjviLNNW7l7Y3ydcHDsBRKZc3GuMQanmcghXPyoDg41g8XbwPudVh7uCmUponBQpIhbuffFP_tbV8SNzsPoFz9CLpBCZagJVXeqWoYMPe2dSsPiLO9Alf_YIe5zpi-zY4C3aLw5g9at35eZTfNd0gBRpR5ojkMIcZZ6IgAA
&redirect_uri=https%3A%2F%2Flocalhost%3A12345
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=p@ssw0rd

//NOTE: client_secret only required for web apps
ParametreParameter AçıklamaDescription
Kiracıtenant Gereklirequired İsteğin yolundaki {tenant} değeri, uygulamada kimlerin oturum açmasını denetlemek için kullanılabilir.The {tenant} value in the path of the request can be used to control who can sign into the application. İzin verilen değerler, kiracı tanımlayıcılarıdır; Örneğin, 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 veya contoso.onmicrosoft.com ya da kiracıdan bağımsız belirteçler için commonThe allowed values are tenant identifiers, for example, 8eaef023-2b34-4da1-9baa-8bc8c9d6a490 or contoso.onmicrosoft.com or common for tenant-independent tokens
client_idclient_id Gereklirequired Azure AD ile kaydettiğinizde uygulamanıza atanan uygulama kimliği.The Application Id assigned to your app when you registered it with Azure AD. Bunu Azure portal bulabilirsiniz.You can find this in the Azure portal. Uygulama kimliği, uygulama kaydının ayarlarında görüntülenir.The Application Id is displayed in the settings of the app registration.
grant_typegrant_type Gereklirequired Yetkilendirme kodu akışı için authorization_code olmalıdır.Must be authorization_code for the authorization code flow.
Kodudurcode Gereklirequired Önceki bölümde aldığınız authorization_codeThe authorization_code that you acquired in the previous section
isteğinderedirect_uri Gereklirequired İstemci uygulamasına kayıtlı bir redirect_uri.A redirect_uriregistered on the client application.
client_secretclient_secret Web uygulamaları için gerekli, ortak istemcilerde izin verilmiyorrequired for web apps, not allowed for public clients Anahtarlaraltındaki uygulamanız Için Azure portalında oluşturduğunuz uygulama gizli anahtarı.The application secret that you created in the Azure Portal for your app under Keys. Client_secrets cihazlarda güvenilir bir şekilde depolanamadığı için yerel bir uygulamada (ortak istemci) kullanılamaz.It cannot be used in a native app (public client), because client_secrets cannot be reliably stored on devices. client_secret sunucu tarafında güvenli bir şekilde depolayabilme özelliğine sahip Web uygulamaları ve Web API 'Leri (tüm gizli istemciler) için gereklidir.It is required for web apps and web APIs (all confidential clients), which have the ability to store the client_secret securely on the server side. Client_secret gönderilmeden önce URL kodlamalı olmalıdır.The client_secret should be URL-encoded before being sent.
Kaynakresource Önerilenrecommended Hedef Web API 'sinin (güvenli kaynak) uygulama KIMLIĞI URI 'SI.The App ID URI of the target web API (secured resource). Uygulama KIMLIĞI URI 'sini bulmak için Azure portalında Azure Active Directory' a tıklayın, uygulama kayıtları' na tıklayın, uygulamanın Ayarlar sayfasını açın ve ardından Özellikler' e tıklayın.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties. Ayrıca, https://graph.microsoft.com gibi bir dış kaynak da olabilir.It may also be an external resource like https://graph.microsoft.com. Bu, yetkilendirme ya da belirteç isteklerinden birinde gereklidir.This is required in one of either the authorization or token requests. Daha az kimlik doğrulama isteminin, kullanıcıdan onay aldığından emin olmak için bunu yetkilendirme isteğine yerleştirdiğinden emin olmak için.To ensure fewer authentication prompts place it in the authorization request to ensure consent is received from the user. Hem yetkilendirme isteğinde hem de belirteç isteğinde, kaynak ' parametrelerinin eşleşmesi gerekir.If in both the authorization request and the token request, the resource` parameters must match.
code_verifiercode_verifier Seçimoptional Authorization_code elde etmek için kullanılan aynı code_verifier.The same code_verifier that was used to obtain the authorization_code. Yetkilendirme kodu verme isteğinde PKCE kullanılmışsa gereklidir.Required if PKCE was used in the authorization code grant request. Daha fazla bilgi için bkz. Pkce RFCFor more information, see the PKCE RFC

Uygulama KIMLIĞI URI 'sini bulmak için Azure portalında Azure Active Directory' a tıklayın, uygulama kayıtları' na tıklayın, uygulamanın Ayarlar sayfasını açın ve ardından Özellikler' e tıklayın.To find the App ID URI, in the Azure Portal, click Azure Active Directory, click Application registrations, open the application's Settings page, then click Properties.

Başarılı yanıtSuccessful response

Azure AD, başarılı bir yanıt üzerine bir erişim belirteci döndürür.Azure AD returns an access token upon a successful response. İstemci uygulamasından gelen ağ çağrılarını ve bunlarla ilişkili gecikme süresini en aza indirmek için, istemci uygulaması OAuth 2,0 yanıtında belirtilen belirteç ömrü için erişim belirteçlerini önbelleğe almalıdır.To minimize network calls from the client application and their associated latency, the client application should cache access tokens for the token lifetime that is specified in the OAuth 2.0 response. Belirteç ömrünü öğrenmek için expires_in veya expires_on parametre değerlerini kullanın.To determine the token lifetime, use either the expires_in or expires_on parameter values.

Bir Web API 'SI kaynağı bir invalid_token hata kodu döndürürse, bu, kaynağın belirtecin dolduğunu belirlediğini gösteriyor olabilir.If a web API resource returns an invalid_token error code, this might indicate that the resource has determined that the token is expired. İstemci ve kaynak saat zamanları farklıysa ("zaman sapması" olarak bilinir), istemci önbelleğinden belirteç temizlenmeden önce kaynak belirtecin süresinin dolabileceğini düşünemez.If the client and resource clock times are different (known as a "time skew"), the resource might consider the token to be expired before the token is cleared from the client cache. Bu durumda, hala hesaplanan ömrü içinde olsa bile, önbellekteki belirteci temizleyin.If this occurs, clear the token from the cache, even if it is still within its calculated lifetime.

Başarılı bir yanıt şöyle görünebilir:A successful response could look like this:

{
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
  "token_type": "Bearer",
  "expires_in": "3600",
  "expires_on": "1388444763",
  "resource": "https://service.contoso.com/",
  "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA",
  "scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
  "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC83ZmU4MTQ0Ny1kYTU3LTQzODUtYmVjYi02ZGU1N2YyMTQ3N2UvIiwiaWF0IjoxMzg4NDQwODYzLCJuYmYiOjEzODg0NDA4NjMsImV4cCI6MTM4ODQ0NDc2MywidmVyIjoiMS4wIiwidGlkIjoiN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlIiwib2lkIjoiNjgzODlhZTItNjJmYS00YjE4LTkxZmUtNTNkZDEwOWQ3NGY1IiwidXBuIjoiZnJhbmttQGNvbnRvc28uY29tIiwidW5pcXVlX25hbWUiOiJmcmFua21AY29udG9zby5jb20iLCJzdWIiOiJKV3ZZZENXUGhobHBTMVpzZjd5WVV4U2hVd3RVbTV5elBtd18talgzZkhZIiwiZmFtaWx5X25hbWUiOiJNaWxsZXIiLCJnaXZlbl9uYW1lIjoiRnJhbmsifQ."
}

ParametreParameter AçıklamaDescription
access_tokenaccess_token İstenen erişim belirteci.The requested access token. Bu, opak bir dizedir; kaynağın alma beklediği görünüme bağlıdır ve istemcinin istemci tarafından görünmesi için tasarlanmamıştır.This is an opaque string - it depends on what the resource expects to receive, and is not intended for the client to look at. Uygulama, bir Web API 'SI gibi güvenli kaynak üzerinde kimlik doğrulaması yapmak için bu belirteci kullanabilir.The app can use this token to authenticate to the secured resource, such as a web API.
token_typetoken_type Belirteç türü değerini gösterir.Indicates the token type value. Azure AD 'nin desteklediği tek tür taşıyıcı.The only type that Azure AD supports is Bearer. Taşıyıcı belirteçleri hakkında daha fazla bilgi için bkz . OAuth 2.0 yetkilendirme çerçevesi: taşıyıcı belirteç kullanımı (RFC 6750)For more information about Bearer tokens, see OAuth2.0 Authorization Framework: Bearer Token Usage (RFC 6750)
expires_inexpires_in Erişim belirtecinin geçerli olduğu süre (saniye cinsinden).How long the access token is valid (in seconds).
expires_onexpires_on Erişim belirtecinin süre sonu.The time when the access token expires. Tarih, 1970-01-01T0:0: 0Z UTC 'den sona erme zamanına kadar saniye sayısı olarak gösterilir.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time. Bu değer, önbelleğe alınmış belirteçlerin ömrünü belirlemede kullanılır.This value is used to determine the lifetime of cached tokens.
Kaynakresource Web API 'sinin (güvenli kaynak) uygulama KIMLIĞI URI 'SI.The App ID URI of the web API (secured resource).
scopescope İstemci uygulamasına kimliğe bürünme izinleri verildi.Impersonation permissions granted to the client application. Varsayılan izin user_impersonation.The default permission is user_impersonation. Güvenli kaynağın sahibi Azure AD 'ye ek değerler kaydedebilir.The owner of the secured resource can register additional values in Azure AD.
refresh_tokenrefresh_token Bir OAuth 2,0 yenileme belirteci.An OAuth 2.0 refresh token. Uygulama, geçerli erişim belirtecinin süresi dolduktan sonra ek erişim belirteçleri almak için bu belirteci kullanabilir.The app can use this token to acquire additional access tokens after the current access token expires. Belirteçleri yenileme uzun süreli olduğundan, uzun süre boyunca kaynaklara erişimi sürdürmek için kullanılabilir.Refresh tokens are long-lived, and can be used to retain access to resources for extended periods of time.
id_tokenid_token Bir kimlik belirtecinitemsil eden işaretsiz bir JSON Web token (JWT).An unsigned JSON Web Token (JWT) representing an ID token. Uygulama, oturum açan kullanıcı hakkında bilgi istemek için bu belirtecin segmentlerinin kodunu çözer base64Url.The app can base64Url decode the segments of this token to request information about the user who signed in. Uygulama değerleri önbelleğe alabilir ve görüntüleyebilir, ancak herhangi bir yetkilendirme veya güvenlik sınırları için bu değere dayanmamalıdır.The app can cache the values and display them, but it should not rely on them for any authorization or security boundaries.

JSON Web belirteçleri hakkında daha fazla bilgi için bkz. JWT IETF taslak belirtimi.For more information about JSON web tokens, see the JWT IETF draft specification. id_tokenshakkında daha fazla bilgi edinmek için, bkz. v 1.0 OpenID Connect Flow.To learn more about id_tokens, see the v1.0 OpenID Connect flow.

Hata yanıtıError response

Belirteç verme uç noktası hataları, istemci, belirteç verme uç noktasını doğrudan çağırdığı için HTTP hata kodlarıdır.The token issuance endpoint errors are HTTP error codes, because the client calls the token issuance endpoint directly. HTTP durum koduna ek olarak, Azure AD belirteç verme uç noktası, hatayı tanımlayan nesneler içeren bir JSON belgesi de döndürür.In addition to the HTTP status code, the Azure AD token issuance endpoint also returns a JSON document with objects that describe the error.

Örnek hata yanıtı şuna benzeyebilir:A sample error response could look like this:

{
  "error": "invalid_grant",
  "error_description": "AADSTS70002: Error validating credentials. AADSTS70008: The provided authorization code or refresh token is expired. Send a new interactive authorization request for this user and resource.\r\nTrace ID: 3939d04c-d7ba-42bf-9cb7-1e5854cdce9e\r\nCorrelation ID: a8125194-2dc8-4078-90ba-7b6592a7f231\r\nTimestamp: 2016-04-11 18:00:12Z",
  "error_codes": [
    70002,
    70008
  ],
  "timestamp": "2016-04-11 18:00:12Z",
  "trace_id": "3939d04c-d7ba-42bf-9cb7-1e5854cdce9e",
  "correlation_id": "a8125194-2dc8-4078-90ba-7b6592a7f231"
}
ParametreParameter AçıklamaDescription
errorerror Oluşan hata türlerini sınıflandırmak için kullanılabilen ve hatalara yanıt vermek için kullanılabilen bir hata kodu dizesi.An error code string that can be used to classify types of errors that occur, and can be used to react to errors.
error_descriptionerror_description Bir geliştiricinin kimlik doğrulama hatasının kök nedenini belirlemesine yardımcı olabilecek belirli bir hata iletisi.A specific error message that can help a developer identify the root cause of an authentication error.
error_codeserror_codes Tanılamada yardımcı olabilecek STS 'ye özgü hata kodlarının bir listesi.A list of STS-specific error codes that can help in diagnostics.
timestamptimestamp Hatanın oluştuğu zaman.The time at which the error occurred.
trace_idtrace_id Tanılamada yardımcı olabilecek istek için benzersiz bir tanımlayıcı.A unique identifier for the request that can help in diagnostics.
correlation_idcorrelation_id İsteğe ait, bileşenler genelinde tanılamada yardımcı olabilecek benzersiz bir tanımlayıcı.A unique identifier for the request that can help in diagnostics across components.

HTTP durum kodlarıHTTP status codes

Aşağıdaki tabloda, belirteç verme uç noktasının döndürdüğü HTTP durum kodları listelenmektedir.The following table lists the HTTP status codes that the token issuance endpoint returns. Bazı durumlarda, yanıtı anlatmak için hata kodu yeterlidir, ancak hatalar varsa, eşlik eden JSON belgesini ayrıştırarak hata kodunu inceleyebilirsiniz.In some cases, the error code is sufficient to describe the response, but if there are errors, you need to parse the accompanying JSON document and examine its error code.

HTTP KoduHTTP Code AçıklamaDescription
400400 Varsayılan HTTP kodu.Default HTTP code. Çoğu durumda kullanılır ve genellikle hatalı oluşturulmuş bir istek nedeniyle olur.Used in most cases and is typically due to a malformed request. İsteği onarın ve yeniden gönderin.Fix and resubmit the request.
401401 Kimlik doğrulama başarısız oldu.Authentication failed. Örneğin, istekte client_secret parametresi eksik.For example, the request is missing the client_secret parameter.
403403 Yetkilendirme başarısız oldu.Authorization failed. Örneğin, kullanıcının kaynağa erişim izni yok.For example, the user does not have permission to access the resource.
500500 Hizmette bir iç hata oluştu.An internal error has occurred at the service. İsteği yeniden deneyin.Retry the request.

Belirteç uç noktası hataları için hata kodlarıError codes for token endpoint errors

Hata koduError Code AçıklamaDescription İstemci eylemiClient Action
invalid_requestinvalid_request Eksik gerekli bir parametre gibi protokol hatası.Protocol error, such as a missing required parameter. İsteği onarın ve yeniden gönderinFix and resubmit the request
invalid_grantinvalid_grant Yetkilendirme kodu geçersiz veya süresi doldu.The authorization code is invalid or has expired. /authorize uç noktasına yeni bir istek deneyinTry a new request to the /authorize endpoint
unauthorized_clientunauthorized_client Kimliği doğrulanmış istemcinin bu yetkilendirme verme türünü kullanma yetkisi yok.The authenticated client is not authorized to use this authorization grant type. Bu durum genellikle istemci uygulaması Azure AD 'ye kaydedilmediğinde veya kullanıcının Azure AD kiracısına eklenmediğinde oluşur.This usually occurs when the client application is not registered in Azure AD or is not added to the user's Azure AD tenant. Uygulama kullanıcıya uygulamayı yükleme ve Azure AD 'ye ekleme yönergesini isteyebilir.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
invalid_clientinvalid_client İstemci kimlik doğrulaması başarısız oldu.Client authentication failed. İstemci kimlik bilgileri geçerli değil.The client credentials are not valid. Bu uygulamayı onarmak için, uygulama Yöneticisi kimlik bilgilerini güncelleştirir.To fix, the application administrator updates the credentials.
unsupported_grant_typeunsupported_grant_type Yetkilendirme sunucusu yetkilendirme verme türünü desteklemiyor.The authorization server does not support the authorization grant type. İstekteki izin türünü değiştirin.Change the grant type in the request. Bu tür bir hata yalnızca geliştirme sırasında ve ilk test sırasında algılanarak gerçekleştirilmelidir.This type of error should occur only during development and be detected during initial testing.
invalid_resourceinvalid_resource Hedef kaynak geçersiz, çünkü mevcut değil, Azure AD bu dosyayı bulamıyor veya doğru şekilde yapılandırılmamış.The target resource is invalid because it does not exist, Azure AD cannot find it, or it is not correctly configured. Bu, varsa kaynağın kiracıda yapılandırılmamış olduğunu gösterir.This indicates the resource, if it exists, has not been configured in the tenant. Uygulama kullanıcıya uygulamayı yükleme ve Azure AD 'ye ekleme yönergesini isteyebilir.The application can prompt the user with instruction for installing the application and adding it to Azure AD.
interaction_requiredinteraction_required İstek, Kullanıcı etkileşimi gerektirir.The request requires user interaction. Örneğin, ek bir kimlik doğrulama adımı gereklidir.For example, an additional authentication step is required. Etkileşimli olmayan bir istek yerine, aynı kaynak için etkileşimli bir yetkilendirme isteğiyle yeniden deneyin.Instead of a non-interactive request, retry with an interactive authorization request for the same resource.
temporarily_unavailabletemporarily_unavailable Sunucu, isteği işlemek için geçici olarak çok meşgul.The server is temporarily too busy to handle the request. İsteği yeniden deneyin.Retry the request. İstemci uygulaması, yanıtı, geçici bir durum nedeniyle geciktiğinde kullanıcıya açıklayabilir.The client application might explain to the user that its response is delayed due to a temporary condition.

Kaynağa erişmek için erişim belirtecini kullanmaUse the access token to access the resource

Bir access_tokenbaşarıyla edindiniz, bu belirteci Web API 'Lerine yönelik isteklerde kullanarak, Authorization üstbilgisine dahil edebilirsiniz.Now that you've successfully acquired an access_token, you can use the token in requests to Web APIs, by including it in the Authorization header. RFC 6750 belirtiminde, korumalı kaynaklara erışmek için http isteklerinde taşıyıcı belirteçlerinin nasıl kullanılacağı açıklanmaktadır.The RFC 6750 specification explains how to use bearer tokens in HTTP requests to access protected resources.

Örnek istekSample request

GET /data HTTP/1.1
Host: service.contoso.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ

Hata yanıtıError Response

RFC 6750 sorun HTTP durum kodlarını uygulayan güvenli kaynaklar.Secured resources that implement RFC 6750 issue HTTP status codes. İstek kimlik doğrulama kimlik bilgilerini içermiyorsa veya belirteç eksikse, yanıt bir WWW-Authenticate üst bilgisi içerir.If the request does not include authentication credentials or is missing the token, the response includes an WWW-Authenticate header. Bir istek başarısız olduğunda, kaynak sunucusu HTTP durum kodu ve bir hata kodu ile yanıt verir.When a request fails, the resource server responds with the HTTP status code and an error code.

İstemci isteği taşıyıcı belirtecini içermiyorsa, aşağıdaki başarısız bir yanıt örneğidir:The following is an example of an unsuccessful response when the client request does not include the bearer token:

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer authorization_uri="https://login.microsoftonline.com/contoso.com/oauth2/authorize",  error="invalid_token",  error_description="The access token is missing.",

Hata parametreleriError parameters

ParametreParameter AçıklamaDescription
authorization_uriauthorization_uri Yetkilendirme sunucusunun URI 'SI (fiziksel uç noktası).The URI (physical endpoint) of the authorization server. Bu değer, bir bulma uç noktasından sunucu hakkında daha fazla bilgi almak için bir arama anahtarı olarak da kullanılır.This value is also used as a lookup key to get more information about the server from a discovery endpoint.

İstemcinin, yetkilendirme sunucusunun güvenilir olduğunu doğrulaması gerekir.The client must validate that the authorization server is trusted. Kaynak Azure AD tarafından korunduğunda, URL 'nin https://login.microsoftonline.com veya Azure AD 'nin desteklediği başka bir ana bilgisayar adı ile başladığını doğrulamak yeterlidir.When the resource is protected by Azure AD, it is sufficient to verify that the URL begins with https://login.microsoftonline.com or another hostname that Azure AD supports. Kiracıya özgü bir kaynak her zaman kiracıya özgü bir yetkilendirme URI 'SI döndürmelidir.A tenant-specific resource should always return a tenant-specific authorization URI.

errorerror OAuth 2,0 yetkilendirme çerçevesinin5,2 bölümünde tanımlanan bir hata kodu değeri.An error code value defined in Section 5.2 of the OAuth 2.0 Authorization Framework.
error_descriptionerror_description Hatanın daha ayrıntılı bir açıklaması.A more detailed description of the error. Bu ileti, son kullanıcı kullanımı için tasarlanmamıştır.This message is not intended to be end-user friendly.
resource_idresource_id Kaynağın benzersiz tanımlayıcısını döndürür.Returns the unique identifier of the resource. İstemci uygulaması, kaynak için bir belirteç istediğinde resource parametresinin değeri olarak bu tanımlayıcıyı kullanabilir.The client application can use this identifier as the value of the resource parameter when it requests a token for the resource.

İstemci uygulamasının bu değeri doğrulaması önemlidir, aksi takdirde kötü amaçlı bir hizmet ayrıcalık yükselmesi saldırısı yapabilirIt is important for the client application to verify this value, otherwise a malicious service might be able to induce an elevation-of-privileges attack

Bir saldırının önlenmesi için önerilen strateji, resource_id erişilmekte olan Web API URL 'siyle aynı olduğunu doğrulamadır.The recommended strategy for preventing an attack is to verify that the resource_id matches the base of the web API URL that being accessed. Örneğin, https://service.contoso.com/data erişilmesi durumunda resource_id https://service.contoso.com/ olabilir.For example, if https://service.contoso.com/data is being accessed, the resource_id can be https://service.contoso.com/. Kimliği doğrulamak için güvenilir bir alternatif yol olmadıkça, istemci uygulamanın temel URL ile başlamayan bir resource_id reddetmesi gerekir.The client application must reject a resource_id that does not begin with the base URL unless there is a reliable alternate way to verify the id.

Taşıyıcı şeması hata kodlarıBearer scheme error codes

RFC 6750 belirtimi, yanıtta WWW-Authenticate üst bilgisini ve taşıyıcı şemasını kullanan kaynaklar için aşağıdaki hataları tanımlar.The RFC 6750 specification defines the following errors for resources that use the WWW-Authenticate header and Bearer scheme in the response.

HTTP durum koduHTTP Status Code Hata koduError Code AçıklamaDescription İstemci eylemiClient Action
400400 invalid_requestinvalid_request İstek düzgün biçimlendirilmemiş.The request is not well-formed. Örneğin, bir parametre eksik veya iki kez aynı parametreyi kullanıyor olabilir.For example, it might be missing a parameter or using the same parameter twice. Hatayı düzeltip isteği yeniden deneyin.Fix the error and retry the request. Bu tür bir hata yalnızca geliştirme sırasında ve başlangıç testinde algılanarak gerçekleştirilmelidir.This type of error should occur only during development and be detected in initial testing.
401401 invalid_tokeninvalid_token Erişim belirteci eksik, geçersiz veya iptal edildi.The access token is missing, invalid, or is revoked. Error_description parametresinin değeri ek ayrıntı sağlar.The value of the error_description parameter provides additional detail. Yetkilendirme sunucusundan yeni bir belirteç isteyin.Request a new token from the authorization server. Yeni belirteç başarısız olursa beklenmeyen bir hata oluştu.If the new token fails, an unexpected error has occurred. Kullanıcıya bir hata iletisi gönderin ve rastgele gecikmelerden sonra yeniden deneyin.Send an error message to the user and retry after random delays.
403403 insufficient_scopeinsufficient_scope Erişim belirteci, kaynağa erişmek için gereken kimliğe bürünme izinlerini içermiyor.The access token does not contain the impersonation permissions required to access the resource. Yetkilendirme uç noktasına yeni bir yetkilendirme isteği gönderin.Send a new authorization request to the authorization endpoint. Yanıt kapsam parametresini içeriyorsa, kaynak isteğindeki kapsam değerini kullanın.If the response contains the scope parameter, use the scope value in the request to the resource.
403403 insufficient_accessinsufficient_access Belirtecin konusu kaynağa erişmek için gerekli izinlere sahip değil.The subject of the token does not have the permissions that are required to access the resource. Kullanıcıdan farklı bir hesap kullanmasını veya belirtilen kaynağa izin istemesini iste.Prompt the user to use a different account or to request permissions to the specified resource.

Erişim belirteçleri yenileniyorRefreshing the access tokens

Erişim belirteçleri kısa süreli olduğundan, kaynaklara erişmeye devam etmek için süreleri dolduktan sonra yenilenmelidir.Access Tokens are short-lived and must be refreshed after they expire to continue accessing resources. /token uç noktasına başka bir POST isteği göndererek access_token yenileyebilirsiniz, ancak bu kez codeyerine refresh_token sağlar.You can refresh the access_token by submitting another POST request to the /token endpoint, but this time providing the refresh_token instead of the code. Yenileme belirteçleri, istemcinize erişim izni verilen tüm kaynaklar için geçerlidir. bu nedenle, resource=https://graph.microsoft.com için bir istekte verilen yenileme belirteci, resource=https://contoso.com/api için yeni bir erişim belirteci istemek üzere kullanılabilir.Refresh tokens are valid for all resources that your client has already been given consent to access - thus, a refresh token issued on a request for resource=https://graph.microsoft.com can be used to request a new access token for resource=https://contoso.com/api.

Yenileme belirteçlerinin belirtilen ömürleri yok.Refresh tokens do not have specified lifetimes. Genellikle, yenileme belirteçlerinin yaşam süreleri nispeten uzundur.Typically, the lifetimes of refresh tokens are relatively long. Ancak, bazı durumlarda belirteçleri yenileme süre sonu, iptal etme veya istenen eylem için yeterli ayrıcalıklara sahip değil.However, in some cases, refresh tokens expire, are revoked, or lack sufficient privileges for the desired action. Uygulamanızın belirteç verme uç noktası tarafından döndürülen hataları beklemesi ve işlemesi gerekir.Your application needs to expect and handle errors returned by the token issuance endpoint correctly.

Yenileme belirteci hatası ile bir yanıt aldığınızda, geçerli yenileme belirtecini atın ve yeni bir yetkilendirme kodu veya erişim belirteci isteyin.When you receive a response with a refresh token error, discard the current refresh token and request a new authorization code or access token. Özellikle, yetkilendirme kodu verme akışında bir yenileme belirteci kullanırken, interaction_required veya invalid_grant hata kodlarıyla bir yanıt alırsanız yenileme belirtecini atın ve yeni bir yetkilendirme kodu isteyin.In particular, when using a refresh token in the Authorization Code Grant flow, if you receive a response with the interaction_required or invalid_grant error codes, discard the refresh token and request a new authorization code.

Bir yenileme belirteci kullanarak yeni bir erişim belirteci almak için kiracıya özgü uç noktaya yönelik örnek bir istek ( ortak uç nokta da kullanabilirsiniz) şöyle görünür:A sample request to the tenant-specific endpoint (you can also use the common endpoint) to get a new access token using a refresh token looks like this:

// Line breaks for legibility only

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=JqQX2PNo9bpM0uEihUPzyrh    // NOTE: Only required for web apps

Başarılı yanıtSuccessful response

Başarılı bir belirteç yanıtı şöyle görünür:A successful token response will look like:

{
  "token_type": "Bearer",
  "expires_in": "3600",
  "expires_on": "1460404526",
  "resource": "https://service.contoso.com/",
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
  "refresh_token": "AwABAAAAv YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl PM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfmVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA"
}
ParametreParameter AçıklamaDescription
token_typetoken_type Belirteç türü.The token type. Yalnızca taşıyıcıdeğeri desteklenir.The only supported value is bearer.
expires_inexpires_in Belirtecin saniye cinsinden kalan süresi.The remaining lifetime of the token in seconds. Tipik bir değer 3600 ' dir (bir saat).A typical value is 3600 (one hour).
expires_onexpires_on Belirtecin süresinin dolacağı tarih ve saat.The date and time on which the token expires. Tarih, 1970-01-01T0:0: 0Z UTC 'den sona erme zamanına kadar saniye sayısı olarak gösterilir.The date is represented as the number of seconds from 1970-01-01T0:0:0Z UTC until the expiration time.
Kaynakresource Erişim belirtecinin erişim için kullanılabileceği güvenli kaynağı tanımlar.Identifies the secured resource that the access token can be used to access.
scopescope Yerel istemci uygulamasına kimliğe bürünme izinleri verildi.Impersonation permissions granted to the native client application. Varsayılan izin user_impersonation' dir.The default permission is user_impersonation. Hedef kaynağın sahibi Azure AD 'ye alternatif değerler kaydedebilir.The owner of the target resource can register alternate values in Azure AD.
access_tokenaccess_token İstenen yeni erişim belirteci.The new access token that was requested.
refresh_tokenrefresh_token Bu yanıttaki bir süre sona erdiğinde yeni erişim belirteçleri istemek için kullanılabilen yeni bir OAuth 2,0 refresh_token.A new OAuth 2.0 refresh_token that can be used to request new access tokens when the one in this response expires.

Hata yanıtıError response

Örnek hata yanıtı şuna benzeyebilir:A sample error response could look like this:

{
  "error": "invalid_resource",
  "error_description": "AADSTS50001: The application named https://foo.microsoft.com/mail.read was not found in the tenant named 295e01fc-0c56-4ac3-ac57-5d0ed568f872. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.\r\nTrace ID: ef1f89f6-a14f-49de-9868-61bd4072f0a9\r\nCorrelation ID: b6908274-2c58-4e91-aea9-1f6b9c99347c\r\nTimestamp: 2016-04-11 18:59:01Z",
  "error_codes": [
    50001
  ],
  "timestamp": "2016-04-11 18:59:01Z",
  "trace_id": "ef1f89f6-a14f-49de-9868-61bd4072f0a9",
  "correlation_id": "b6908274-2c58-4e91-aea9-1f6b9c99347c"
}
ParametreParameter AçıklamaDescription
errorerror Oluşan hata türlerini sınıflandırmak için kullanılabilen ve hatalara yanıt vermek için kullanılabilen bir hata kodu dizesi.An error code string that can be used to classify types of errors that occur, and can be used to react to errors.
error_descriptionerror_description Bir geliştiricinin kimlik doğrulama hatasının kök nedenini belirlemesine yardımcı olabilecek belirli bir hata iletisi.A specific error message that can help a developer identify the root cause of an authentication error.
error_codeserror_codes Tanılamada yardımcı olabilecek STS 'ye özgü hata kodlarının bir listesi.A list of STS-specific error codes that can help in diagnostics.
timestamptimestamp Hatanın oluştuğu zaman.The time at which the error occurred.
trace_idtrace_id Tanılamada yardımcı olabilecek istek için benzersiz bir tanımlayıcı.A unique identifier for the request that can help in diagnostics.
correlation_idcorrelation_id İsteğe ait, bileşenler genelinde tanılamada yardımcı olabilecek benzersiz bir tanımlayıcı.A unique identifier for the request that can help in diagnostics across components.

Hata kodlarının ve önerilen istemci eyleminin açıklaması için bkz. belirteç uç noktası hataları Için hata kodları.For a description of the error codes and the recommended client action, see Error codes for token endpoint errors.

Sonraki adımlarNext steps

Azure AD v 1.0 uç noktası ve Web uygulamalarınıza ve Web API 'Lerine kimlik doğrulama ve yetkilendirme ekleme hakkında daha fazla bilgi edinmek için bkz. örnek uygulamalar.To learn more about the Azure AD v1.0 endpoint and how to add authentication and authorization to your web applications and web APIs, see sample applications.