Erişim jetonları ve yetkilendirme kodları isteme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Bu bölümde, erişim jetonları ve yetkilendirme kodları isteme, OAuth 2.0 uç noktalarını yapılandırma ve desteklenen her bir izin türü için politikaları yapılandırma işlemlerinin nasıl yapılacağı açıklanmıştır.

Örnek kod

Bu konuda açıklanan politikalara ve uç noktalara, size kolaylık sağlamak amacıyla Apigee api-platform-samples deposunda yer alan oauth-doc-examples projesinde yer alan GitHub'dan erişebilirsiniz. Örnek kodu dağıtabilir ve bu konuda gösterilen örnek istekleri deneyebilirsiniz. Ayrıntılar için README projesine bakın.

Erişim jetonu isteme: yetkilendirme kodu izin türü

Bu bölümde, yetkilendirme kodu izin türü akışını kullanarak erişim jetonu isteme adımları açıklanmaktadır. OAuth 2.0 izin türlerine giriş için OAuth 2.0'a giriş başlıklı makaleye göz atın.

Örnek istek

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
   -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
   -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
   -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'

Gerekli parametreler

Varsayılan olarak bu parametreler x-www-form-urlencoded olmalı ve istek gövdesinde belirtilmelidir (yukarıdaki örnekte gösterildiği gibi). Ancak bu /accesstoken uç noktasına ekli OAuthV2 politikasındaki <GrantType>, <Code> ve <RedirectUri> öğelerini yapılandırarak bu varsayılan değeri değiştirebilirsiniz. Ayrıntılar için OAuthV2 politikası bölümüne bakın.

  • grant_type - authorization_code değerine ayarlanmalıdır.
  • kod - /authorize uç noktasından (veya ona dilediğiniz başka bir adla) alınan yetkilendirme kodu. Yetkilendirme kodu izin türü akışında erişim jetonu istemek için önce bir yetkilendirme kodu almanız gerekir. Aşağıdaki Yetkilendirme kodları isteme konusuna bakın. Yetkilendirme kodu izin türünü uygulama bölümüne de göz atın.
  • redirect_uri - Önceki yetkilendirme kodu isteğine redirect_uri parametresi dahil edilmişse bu parametreyi sağlamanız gerekir. redirect_uri parametresi yetkilendirme kodu isteğine dahil edilmediyse ve bu parametreyi sağlamazsanız bu politika, geliştirici uygulaması kaydedildiğinde sağlanan Geri Çağırma URL'sinin değerini kullanır.

İsteğe bağlı parametreler

  • state - Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahtekarlığı saldırılarını önlemek için kullanılır.
  • scope - Çıkarılan jetonun kullanılabileceği API ürünlerinin listesini filtrelemenize olanak tanır. Kapsam hakkında ayrıntılı bilgi için OAuth2 kapsamlarıyla çalışma başlıklı makaleyi inceleyin.

Kimlik Doğrulama

İstemci Kimliği ve İstemci Sırrı'nı Temel Kimlik Doğrulama başlığı (Base64 olarak kodlanmış) veya client_id ve client_secret form parametreleri olarak iletmeniz gerekir. Bu değerleri kayıtlı bir geliştirici uygulamasından alırsınız. Ayrıca "Temel kimlik doğrulama kimlik bilgilerini kodlama" konusuna da bakın.

Örnek uç nokta

Erişim jetonu oluşturmak için örnek bir uç nokta yapılandırması aşağıda verilmiştir. Bu işlem, yetkilendirme_kodu izin türünü destekleyecek şekilde yapılandırılması gereken GenerateAccessToken politikasını yürütür.

...
       <Flow name="generate-access-token">
            <Description>Generate a token</Description>
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Örnek politika

Bu, authorization_code izin türünü kabul edecek şekilde yapılandırılan temel bir GenerateAccessToken politikasıdır. Bu politikayla yapılandırabileceğiniz isteğe bağlı yapılandırma öğeleri hakkında bilgi edinmek için OAuthV2 politikası bölümüne bakın.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn>
    <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn>
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

İadeler

<GenerateResponse> etkinleştirildiğinde politika, aşağıda gösterildiği gibi, erişim jetonunu içeren bir JSON yanıtı döndürür. authorization_code izin türü, bir erişim jetonu ve yenileme jetonları oluşturur. Bu nedenle, aşağıdaki gibi bir yanıt verilebilir:

{
    "issued_at": "1420262924658",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420262924658",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "fYACGW7OCPtCNDEnRSnqFlEgogboFPMm",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "2l4IQtZXbn5WBJdL6EF7uenOWRsi",
    "organization_name": "docs",
    "refresh_token_expires_in": "86399", //--in seconds
    "refresh_count": "0"
}

<GenerateResponse> politikası yanlış değerine ayarlanırsa politika bir yanıt döndürmez. Bunun yerine, aşağıdaki akış değişkenleri grubunu erişim jetonu verme işlemiyle ilgili verilerle doldurur.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Örneğin:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

Erişim jetonu isteme: istemci kimlik bilgileri izin türü

Bu bölümde, istemci kimlik bilgileri izin türü akışını kullanarak nasıl erişim jetonu isteyeceğiniz açıklanmaktadır. OAuth 2.0 izin türlerine giriş için OAuth 2.0'a giriş başlıklı makaleye göz atın.

Örnek istek

Aşağıdaki çağrıda temel kimlik doğrulama başlığını kodlama hakkında bilgi edinmek için "Temel kimlik doğrulama kimlik bilgilerini kodlama" bölümüne bakın.

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHoAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Gerekli parametreler

Varsayılan olarak, gerekli allow_type parametresi x-www-form-urlencoded olmalı ve istek gövdesinde belirtilmelidir (yukarıdaki örnekte gösterildiği gibi). Ancak bu /accesstoken uç noktasına ekli OAuthV2 politikasındaki <GrantType> öğesini yapılandırarak bu varsayılan değeri değiştirebilirsiniz. Örneğin, parametreyi bir sorgu parametresinde iletmeyi seçebilirsiniz. Ayrıntılar için OAuthV2 politikası bölümüne bakın.

  • grant_type - client_credentials değerine ayarlanmalıdır.

İsteğe bağlı parametreler

  • state - Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahtekarlığı saldırılarını önlemek için kullanılır.
  • scope - Çıkarılan jetonun kullanılabileceği API ürünlerinin listesini filtrelemenize olanak tanır. Kapsam hakkında ayrıntılı bilgi için OAuth2 kapsamlarıyla çalışma başlıklı makaleyi inceleyin.

Kimlik Doğrulama

İstemci Kimliği ve İstemci Sırrı'nı, Temel Kimlik Doğrulama başlığı (Base64 olarak kodlanmış) veya client_id ve client_secret form parametreleri olarak iletmeniz gerekir. Bu değerleri, istekle ilişkili kayıtlı geliştirici uygulamasından alırsınız. "Temel kimlik doğrulama kimlik bilgilerini kodlama" bölümüne de göz atın.

Örnek uç nokta

Erişim jetonu oluşturmak için örnek bir uç nokta yapılandırması aşağıda verilmiştir. Bu işlem, client_credentials izin türünü destekleyecek şekilde yapılandırılması gereken GenerateAccessToken politikasını yürütür.

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Örnek politika

Bu, client_credentials izin türünü kabul edecek şekilde yapılandırılan temel bir GenerateAccessToken politikasıdır. Bu politikayla yapılandırabileceğiniz isteğe bağlı yapılandırma öğeleri hakkında bilgi edinmek için OAuthV2 politikası bölümüne bakın.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <SupportedGrantTypes>
      <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

İadeler

<GenerateResponse> etkinleştirildiğinde politika bir JSON yanıtı döndürür. client_credentials izin türünde yenileme jetonları desteklenmez. Yalnızca bir erişim jetonu bastırılır. Örneğin:

{
    "issued_at": "1420260525643",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav",
    "organization_name": "docs"
}

<GenerateResponse> politikası yanlış değerine ayarlanırsa politika bir yanıt döndürmez. Bunun yerine, aşağıdaki akış değişkenleri grubunu erişim jetonu verme işlemiyle ilgili verilerle doldurur.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds

Örneğin:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in     //--in seconds

Erişim jetonu isteme: Şifre izin türü

Bu bölümde, kaynak sahibi şifre kimlik bilgileri (şifre) izin türü akışını kullanarak erişim jetonu isteme süreci açıklanmaktadır. OAuth 2.0 izin türlerine giriş için OAuth 2.0'a giriş bölümüne göz atın.

Şifre verme türünün nasıl uygulanacağını gösteren 4 dakikalık bir video da dahil olmak üzere şifre verme türü hakkında daha fazla bilgi için Şifre verme türünü uygulama bölümüne bakın.

Örnek istek

Aşağıdaki çağrıda temel kimlik doğrulama başlığını kodlama hakkında bilgi edinmek için "Temel kimlik doğrulama kimlik bilgilerini kodlama" bölümüne bakın.

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -X POST https://docs-test.apigee.net/oauth/token \
  -d 'grant_type=password&username=the-user-name&password=the-users-password'

Gerekli parametreler

Varsayılan olarak bu parametreler x-www-form-urlencoded olmalı ve istek gövdesinde belirtilmelidir (yukarıdaki örnekte gösterildiği gibi). Ancak bu /token uç noktasına ekli OAuthV2 politikasındaki <GrantType>, <Username> ve <Password> öğelerini yapılandırarak bu varsayılan değeri değiştirebilirsiniz. Ayrıntılar için OAuthV2 politikası bölümüne bakın.

Kullanıcı kimlik bilgileri genellikle LDAP veya JavaScript politikası kullanılarak kimlik bilgisi deposuna göre doğrulanır.

  • grant_type - password değerine ayarlanmalıdır.
  • kullanıcı adı: Kaynak sahibinin kullanıcı adı.
  • şifre: Kaynak sahibinin şifresi.

İsteğe bağlı parametreler

  • state - Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahtekarlığı saldırılarını önlemek için kullanılır.
  • scope - Çıkarılan jetonun kullanılabileceği API ürünlerinin listesini filtrelemenize olanak tanır. Kapsam hakkında ayrıntılı bilgi için OAuth2 kapsamlarıyla çalışma başlıklı makaleyi inceleyin.

Kimlik Doğrulama

İstemci Kimliği ve İstemci Sırrı'nı, Temel Kimlik Doğrulama başlığı (Base64 olarak kodlanmış) veya client_id ve client_secret form parametreleri olarak iletmeniz gerekir. Bu değerleri, istekle ilişkili kayıtlı geliştirici uygulamasından alırsınız. "Temel kimlik doğrulama kimlik bilgilerini kodlama" bölümüne de göz atın.

Örnek uç nokta

Erişim jetonu oluşturmak için örnek bir uç nokta yapılandırması aşağıda verilmiştir. Şifre verme türünü destekleyecek şekilde yapılandırılması gereken GenerateAccessToken politikasını yürütür.

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

Örnek politika

Bu, şifre atama türünü kabul edecek şekilde yapılandırılan temel bir GenerateAccessToken politikasıdır. Bu politikayla yapılandırabileceğiniz isteğe bağlı yapılandırma öğeleri hakkında bilgi edinmek için OAuthV2 politikası bölümüne bakın.

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

İadeler

<GenerateResponse> etkinleştirildiğinde politika bir JSON yanıtı döndürür. Şifre izni türüyle birlikte hem erişim jetonu hem de yenileme jetonu bastırılır. Örneğin:

{
    "issued_at": "1420258685042",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420258685042",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "0"
}

<GenerateResponse> politikası yanlış değerine ayarlanırsa politika bir yanıt döndürmez. Bunun yerine, aşağıdaki akış değişkenleri grubunu erişim jetonu verme işlemiyle ilgili verilerle doldurur.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Örneğin:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

Erişim jetonu isteme: örtülü izin türü

Bu bölümde, dolaylı izin türü akışını kullanarak nasıl erişim jetonu isteyeceğiniz açıklanmaktadır. OAuth 2.0 izin türleri hakkında bilgi edinmek için OAuth 2.0'a giriş başlıklı makaleye göz atın.

Örnek istek

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'https://docs-test.apigee.net/oauth/implicit?response_type=token&client_id=ABC123&redirect_uri=http://callback-example.com'

Gerekli parametreler

Varsayılan olarak bu parametreler sorgu parametreleri olmalıdır (yukarıdaki örnekte gösterildiği gibi). Ancak bu /token uç noktasına ekli OAuthV2 politikasındaki <ResponseType>, <ClientId> ve <RedirectUri> öğelerini yapılandırarak bu varsayılan değeri değiştirebilirsiniz. Ayrıntılar için OAuthV2 politikası bölümüne bakın.

Kullanıcı kimlik bilgileri genellikle bir LDAP hizmeti açıklama metni veya JavaScript politikası kullanılarak kimlik bilgileri deposuna göre doğrulanır.

  • response_type - token değerine ayarlanmalıdır.
  • client_id - Kayıtlı bir geliştirici uygulamasının istemci kimliği.
  • redirect_uri - İstemci geliştirici uygulaması kaydedildiğinde bir Geri Çağırma URI'sı sağlanmamışsa bu parametre zorunludur. İstemci kaydı sırasında bir Geri Çağırma URL'si sağlandıysa bu değer bu değerle karşılaştırılır ve tam olarak eşleşmelidir.

İsteğe bağlı parametreler

  • state - Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahtekarlığı saldırılarını önlemek için kullanılır.
  • scope - Çıkarılan jetonun kullanılabileceği API ürünlerinin listesini filtrelemenize olanak tanır. Kapsam hakkında ayrıntılı bilgi için OAuth2 kapsamlarıyla çalışma başlıklı makaleyi inceleyin.

Kimlik Doğrulama

Örtülü izin, temel kimlik doğrulaması gerektirmez. Burada açıklandığı gibi, bir istemci kimliğini istek parametresi olarak iletmeniz gerekir.

Örnek uç nokta

Erişim jetonu oluşturmak için örnek bir uç nokta yapılandırması aşağıda verilmiştir. GenerateAccessTokenImplicitGrant politikası uygulanır.

...
       <Flow name="generate-access-token-implicit">
            <Request>
                <Step>
                    <Name>GenerateAccessTokenImplicitGrant</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition>
        </Flow>
...

Örnek politika

Bu, örtülü izin türü akışı için jeton isteklerini işleyen temel bir GenerateAccessTokenImplicitGrant politikasıdır. Bu politikayla yapılandırabileceğiniz isteğe bağlı yapılandırma öğeleri hakkında bilgi edinmek için OAuthV2 politikası bölümüne bakın.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="GenerateAccessTokenImplicit">
    <DisplayName>GenerateAccessTokenImplicit</DisplayName>
    <Operation>GenerateAccessTokenImplicitGrant</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

İadeler

<GenerateResponse> etkinleştirildiğinde politika, yanıt başlığında bir 302 Location yönlendirmesi döndürür. Yönlendirme, redirect_uri parametresinde belirtilen URL'yi işaret eder ve sonuna erişim jetonu ile jetonun geçerlilik bitiş zamanı eklenir. Örtülü izin türünün, yenileme jetonlarını desteklemediğini unutmayın. Örneğin:

https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5

<GenerateResponse> politikası yanlış değerine ayarlanırsa politika bir yanıt döndürmez. Bunun yerine, aşağıdaki akış değişkenleri grubunu erişim jetonu verme işlemiyle ilgili verilerle doldurur.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in  //--in seconds

Örneğin:

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in   //--in seconds

Yetkilendirme kodu isteme

Yetkilendirme kodu izin türü akışını kullanıyorsanız erişim jetonu istemeden önce yetkilendirme kodu almanız gerekir.

Örnek istek

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'

/oauth/authorize proxy uç noktasına bir OAuthV2 GenerateAuthorizationCode politikasının eklendiği durumlar (aşağıdaki örnek uç noktaya bakın).

Gerekli parametreler

Varsayılan olarak bu parametreler sorgu parametreleri olmalıdır (yukarıdaki örnekte gösterildiği gibi). Ancak bu /authorize uç noktasına ekli OAuthV2 politikasındaki <ResponseType>, <ClientId> ve <RedirectUri> öğelerini yapılandırarak bu varsayılan değeri değiştirebilirsiniz. Ayrıntılar için OAuthV2 politikası bölümüne bakın.

  • response_type - code değerine ayarlanmalıdır.
  • client_id - Kayıtlı bir geliştirici uygulamasının istemci kimliği.

İsteğe bağlı parametreler

  • redirect_uri - Kayıtlı istemci uygulamasında tam (kısmi olmayan) bir Geri Çağırma URI'si belirtilmişse bu parametre isteğe bağlıdır; aksi takdirde gereklidir. Geri çağırma, Edge'in yeni basılan kimlik doğrulama kodunu gönderdiği URL'dir. Uygulamaları kaydetme ve API anahtarlarını yönetme başlıklı makaleyi de inceleyin.
  • state - Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahtekarlığı saldırılarını önlemek için kullanılır.
  • scope - Çıkarılan jetonun kullanılabileceği API ürünlerinin listesini filtrelemenize olanak tanır. Kapsam hakkında ayrıntılı bilgi için OAuth2 kapsamlarıyla çalışma başlıklı makaleyi inceleyin.

Kimlik Doğrulama

Temel kimlik doğrulama gerektirmez ancak kayıtlı istemci uygulamasının istemci kimliği istekte sağlanmalıdır.

Örnek uç nokta

Yetkilendirme kodu oluşturmak için örnek bir uç nokta yapılandırması aşağıda verilmiştir:


<OAuthV2 name="GenerateAuthorizationCode">
  <Operation>GenerateAuthorizationCode</Operation>
    <!--
    ExpiresIn, in milliseconds. The ref is optional. The explicitly specified
    value is the default, when the variable reference cannot be resolved.
        60000 = 1 minute
       120000 = 2 minutes
    -->
  <ExpiresIn>60000</ExpiresIn>
  <GenerateResponse enabled="true"/>
</OAuthV2>

Örnek politika

Bu, temel bir GenerateAuthorizationCode politikasıdır. Bu politikayla yapılandırabileceğiniz isteğe bağlı yapılandırma öğeleri hakkında bilgi edinmek için OAuthV2 politikası bölümüne bakın.

<OAuthV2 name="GenerateAuthorizationCode">
    <Operation>GenerateAuthorizationCode</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

İadeler

<GenerateResponse> etkinleştirildiğinde politika, ?code sorgu parametresini yetkilendirme kodu eklenmiş olarak redirect_uri (Callback URI) konumuna döndürür. Yanıtın Konum üstbilgisindeki URL ile birlikte bir 302 tarayıcı yönlendirmesi aracılığıyla gönderilir. Örneğin: ?code=123456.

<GenerateResponse>, false değerine ayarlanırsa politika bir yanıt döndürmez. Bunun yerine, aşağıdaki akış değişkenleri grubunu yetkilendirme koduyla ilgili verilerle doldurur.

oauthv2authcode.{policy-name}.code
oauthv2authcode.{policy-name}.scope
oauthv2authcode.{policy-name}.redirect_uri
oauthv2authcode.{policy-name}.client_id

Örneğin:

oauthv2authcode.GenerateAuthorizationCode.code
oauthv2authcode.GenerateAuthorizationCode.scope
oauthv2authcode.GenerateAuthorizationCode.redirect_uri
oauthv2authcode.GenerateAuthorizationCode.client_id

Erişim jetonunu yenileme

Yenileme jetonu, genellikle erişim jetonunun süresi dolduktan veya geçersiz hale geldikten sonra, erişim jetonu almak için kullandığınız bir kimlik bilgisidir. Erişim jetonu aldığınızda, yanıtta bir yenileme jetonu döndürülür.

Yenileme jetonu kullanarak yeni bir erişim jetonu istemek için:

Örnek istek

Aşağıdaki çağrıda temel kimlik doğrulama başlığını kodlama hakkında bilgi edinmek için "Temel kimlik doğrulama kimlik bilgilerini kodlama" bölümüne bakın.

$ curl -X POST \
  -H "Content-type: application/x-www-form-urlencoded" \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \
  -d 'grant_type=refresh_token&refresh_token=my-refresh-token'

Gerekli parametreler

  • grant_type - refresh_token değerine ayarlanmalıdır.
  • refresh_token - Yenilemek istediğiniz erişim jetonuyla ilişkili yenileme jetonu.

Varsayılan olarak, politika bunları yukarıdaki örnekte gösterildiği gibi istek gövdesinde belirtilen x-www-form-urlencoded parametreleri olarak arar. Bu girişler için alternatif bir konum yapılandırmak istiyorsanız OAuthV2 politikasındaki <GrantType> ve <RefreshToken> öğelerini kullanabilirsiniz. Ayrıntılar için OAuthV2 politikası bölümüne bakın.

İsteğe bağlı parametreler

  • state - Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahtekarlığı saldırılarını önlemek için kullanılır.
  • scope - Çıkarılan jetonun kullanılabileceği API ürünlerinin listesini filtrelemenize olanak tanır. Kapsam hakkında ayrıntılı bilgi için OAuth2 kapsamlarıyla çalışma başlıklı makaleyi inceleyin.

Kimlik Doğrulama

  • client_id
  • client_secret

İstemci Kimliği ve İstemci Sırrı'nı Temel Kimlik Doğrulama başlığı (Base64 olarak kodlanmış) veya client_id ve client_secret form parametreleri olarak iletmeniz gerekir. Ayrıca "Temel kimlik doğrulama kimlik bilgilerini kodlama" bölümüne de bakın.

Bir erişim jetonunu yenilerken kullanıcının yeniden kimlik doğrulaması yapılmaz.

Aşağıda, yenileme jetonu kullanarak erişim jetonu oluşturmak için örnek bir uç nokta yapılandırması verilmiştir. YenileAccessToken politikasını yürütür.

 ...
       <Flow name="generate-refresh-token">
            <Request>
                <Step>
                    <Name>RefreshAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition>
       </Flow>
...

Örnek politika

Bu, refresh_token izin türünü kabul edecek şekilde yapılandırılmış temel bir YenileAccessToken politikasıdır. Bu politikayla yapılandırabileceğiniz isteğe bağlı yapılandırma öğeleri hakkında bilgi edinmek için OAuthV2 politikası bölümüne bakın.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="RefreshAccessToken">
    <Operation>RefreshAccessToken</Operation>
    <GenerateResponse enabled="true"/>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
</OAuthV2>

İadeler

<GenerateResponse> etkinleştirildiğinde politika, yeni erişim jetonunu içeren bir JSON yanıtı döndürür. refresh_token izin türü, hem erişim hem de yeni yenileme jetonları basmayı destekler. Örneğin:

{
    "issued_at": "1420301470489",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "refresh_token_issued_at": "1420301470489",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "token_type": "BearerToken",
    "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "2"
}

Yeni bir yenileme jetonu basıldıktan sonra orijinal jetonun artık geçerli olmadığını bilmeniz gerekir.

Yukarıdaki yanıt, <GenerateResponse> doğru değerine ayarlanırsa aldığınız yanıt olur. <GenerateResponse> yanlış değerine ayarlanırsa politika bir yanıt döndürmez. Bunun yerine, aşağıdaki bağlam (akış) değişkenleri grubunu erişim jetonu izniyle ilgili verilerle doldurur.

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

Örneğin:

oauthv2accesstoken.RefreshAccessToken.access_token
oauthv2accesstoken.RefreshAccessToken.expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token
oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at
oauthv2accesstoken.RefreshAccessToken.refresh_token_status

Temel kimlik doğrulama kimlik bilgilerini kodlama

Jeton veya yetkilendirme kodu istemek için bir API çağrısında bulunmanız önerilir. Bu nedenle OAuth 2.0 spesifikasyonu tarafından, client_id ve client_secret değerlerinin, IETF RFC 2617'de açıklandığı gibi bir HTTP-Temel Kimlik Doğrulama başlığı olarak iletilmesi önerilir. Bunu yapmak için iki değeri iki nokta üst üste işaretiyle birleştirdiğinizde elde edilen sonucu base64 olarak kodlamanız gerekir.

Sözde kodda:

result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))

Bu örnekte ns4fQc14Zg4hKFCNaSzArVuwszX95X client_id, ZIjFyTsNgQNyxI ise istemci gizli anahtarıdır.

Base64 olarak kodlanmış değeri hesaplamak için kullandığınız programlama dilinden bağımsız olarak, bu istemci kimlik bilgileri için base64 olarak kodlanmış sonuç şu şekilde olacaktır: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

Ardından, aşağıdaki şekilde jeton isteğinde bulunabilirsiniz:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

-u seçeneğini kullanırsanız curl yardımcı programı sizin için HTTP Temel üst bilgisini oluşturur. Aşağıdakiler yukarıdakilere eşdeğerdir:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
  -u 'ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI' \
  -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
  -d 'grant_type=client_credentials'

Diğer programlama ortamları için base64 kodlamalı başlığı otomatik olarak oluşturan benzer kısayollar olabilir.

Veritabanındaki jetonları karma haline getirme

Veritabanı güvenlik ihlali durumunda OAuth erişimini korumak ve jetonları yenilemek için Edge kuruluşunuzda otomatik jeton karma oluşturma işlemini etkinleştirebilirsiniz. Bu özellik etkinleştirildiğinde Edge, yeni oluşturulan OAuth erişiminin karma oluşturma işlemi uygulanmış bir sürümünü otomatik olarak oluşturur ve belirttiğiniz algoritmayı kullanarak jetonları yeniler. (Mevcut jetonlara toplu karma oluşturma işlemi uygulanmasıyla ilgili bilgiler aşağıda verilmiştir.) Karma oluşturma işlemi uygulanmamış jetonlar, API çağrılarında kullanılır ve Edge bunları veritabanındaki karma oluşturma işlemi uygulanmış sürümlerle karşılaştırarak doğrular.

Aşağıdaki kuruluş düzeyinde mülkler, OAuth jetonuna karma oluşturma işlemini kontrol eder.

features.isOAuthTokenHashingEnabled = true
features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

Karma oluşturma işlemi uygulanmış jetonlarınız varsa ve bunları süresi dolana kadar saklamak istiyorsanız kuruluşunuzda karma oluşturma algoritmasının mevcut algoritmayla (örneğin, eski Edge varsayılanı SHA1) eşleştiği aşağıdaki özellikleri ayarlayın. Jetonlara karma oluşturma işlemi uygulanmamışsa PLAIN ayarını kullanın.

features.isOAuthTokenFallbackHashingEnabled = true
features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

Edge bulut müşterisiyseniz kuruluşunuzda bu özellikleri ayarlamak ve isteğe bağlı olarak mevcut jetonlara toplu karma oluşturma işlemi uygulamak için Apigee Edge Destek Ekibi ile iletişime geçin.

İlgili konular