Erişim jetonları ve yetkilendirme kodları isteme

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

Bu konuda, erişim jetonları ve yetkilendirme kodları isteme, OAuth 2.0 uç noktalarını yapılandırma ve desteklenen her yetki türü için politikaları yapılandırma işlemlerini nasıl yapacağınız gösterilmektedir.

Örnek kod

Bu konuda ele alınan politikalar ve uç noktalar, Apigee api-platform-samples deposundaki oauth-doc-examples projesinde GitHub'da mevcuttur. Örnek kodu dağıtabilir ve bu konuda gösterilen örnek istekleri deneyebilirsiniz. Ayrıntılar için projenin README dosyasına bakın.

Erişim jetonu isteğinde bulunma: Yetkilendirme kodu izin türü

Bu bölümde, yetkilendirme kodu verme türü akışını kullanarak nasıl erişim jetonu isteğinde bulunacağınız açıklanmaktadır. OAuth 2.0 erişim izni türlerine giriş için OAuth 2.0'a giriş başlıklı makaleyi inceleyin.

Ö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 varsayılanı, bu /accesstoken uç noktasına eklenen OAuthV2 politikasındaki <GrantType>, <Code> ve <RedirectUri> öğelerini yapılandırarak değiştirmek mümkündür. Ayrıntılar için OAuthV2 politikası başlıklı makaleyi inceleyin.

  • grant_type: authorization_code değerine ayarlanmalıdır.
  • code: /authorize uç noktasından (veya adlandırmak istediğiniz herhangi bir uç noktadan) alınan yetkilendirme kodu. Yetkilendirme kodu izin türü akışında erişim jetonu istemek için önce yetkilendirme kodu almanız gerekir. Aşağıdaki Yetkilendirme kodu isteme bölümüne bakın. Yetkilendirme kodu izin türünü uygulama başlıklı makaleyi de inceleyin.
  • redirect_uri: Önceki yetkilendirme kodu isteğine redirect_uri parametresi dahil edildiyse 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ı kaydedilirken 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 sahteciliği saldırılarını önlemek için kullanılır.
  • scope: Bası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ğini ve istemci gizli anahtarını, temel kimlik doğrulama üstbilgisi (Base64 kodlu) veya form parametreleri client_id ve client_secret olarak iletmeniz gerekir. Bu değerleri kayıtlı bir geliştirici uygulamasından alırsınız. "Temel kimlik doğrulama kimlik bilgilerini kodlama" başlıklı makaleyi de inceleyin.

Ö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, GenerateAccessToken politikasını yürütür. Bu politika, authorization_code grant türünü destekleyecek şekilde yapılandırılmalıdı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 yetkilendirme türünü kabul edecek şekilde yapılandırılmış 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ı başlıklı makaleyi inceleyin.

<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ü, erişim jetonu ve yenileme jetonları oluşturur. Bu nedenle yanıt aşağıdaki gibi görünebilir:

{
    "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> yanlış olarak ayarlanırsa politika 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 atama türü

Bu bölümde, istemci kimlik bilgisi verme türü akışını kullanarak nasıl erişim jetonu isteğinde bulunacağınız açıklanmaktadır. OAuth 2.0 erişim izni türlerine giriş için OAuth 2.0'a giriş başlıklı makaleyi inceleyin.

Örnek istek

Aşağıdaki çağrıda temel kimlik doğrulama üstbilgisini kodlama hakkında bilgi için "Temel kimlik doğrulama kimlik bilgilerini kodlama" başlıklı makaleye 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 grant_type parametresi x-www-form-urlencoded olmalı ve istek gövdesinde belirtilmelidir (yukarıdaki örnekte gösterildiği gibi). Ancak bu varsayılanı, bu /accesstoken uç noktasına eklenen OAuthV2 politikasındaki <GrantType> öğesini yapılandırarak değiştirmek mümkündür. Örneğin, parametresini bir sorgu parametresinde iletmeyi seçebilirsiniz. Ayrıntılar için OAuthV2 politikası başlıklı makaleyi inceleyin.

  • 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 sahteciliği saldırılarını önlemek için kullanılır.
  • scope: Bası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ğini ve istemci gizli anahtarını, temel kimlik doğrulama üstbilgisi (Base64 kodlu) veya form parametreleri client_id ve client_secret olarak iletmeniz gerekir. Bu değerleri, istekle ilişkili kayıtlı geliştirici uygulamasından alırsınız. Ayrıca "Temel kimlik doğrulama bilgilerini kodlama" bölümüne 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 politika, client_credentials atama 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 yetkilendirme türünü kabul edecek şekilde yapılandırılmış 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ı başlıklı makaleyi inceleyin.

<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 yetkilendirme türünde yenileme jetonlarının desteklenmediğini unutmayın. Yalnızca bir erişim jetonu oluşturulur. Ö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> yanlış olarak ayarlanırsa politika 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 atama türü

Bu bölümde, kaynak sahibi şifresi kimlik bilgileri (şifre) yetkilendirme türü akışını kullanarak nasıl erişim jetonu isteğinde bulunacağınız açıklanmaktadır. OAuth 2.0 erişim izni türlerine giriş için OAuth 2.0'a giriş başlıklı makaleyi inceleyin.

Şifre atama türü hakkında daha fazla bilgi edinmek ve nasıl uygulanacağını gösteren 4 dakikalık videoyu izlemek için Şifre atama türünü uygulama başlıklı makaleyi inceleyin.

Örnek istek

Aşağıdaki çağrıda temel kimlik doğrulama üstbilgisini kodlama hakkında bilgi için "Temel kimlik doğrulama kimlik bilgilerini kodlama" başlıklı makaleye 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 varsayılanı, bu /token uç noktasına eklenen OAuthV2 politikasındaki <GrantType>, <Username> ve <Password> öğelerini yapılandırarak değiştirmek mümkündür. Ayrıntılar için OAuthV2 politikası başlıklı makaleyi inceleyin.

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

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

İsteğe bağlı parametreler

  • state: Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahteciliği saldırılarını önlemek için kullanılır.
  • scope: Bası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ğini ve istemci gizli anahtarını, temel kimlik doğrulama üstbilgisi (Base64 kodlu) veya form parametreleri client_id ve client_secret olarak iletmeniz gerekir. Bu değerleri, istekle ilişkili kayıtlı geliştirici uygulamasından alırsınız. Ayrıca "Temel kimlik doğrulama bilgilerini kodlama" bölümüne 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 politika, şifre atama 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 verme türünü kabul edecek şekilde yapılandırılmış 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ı başlıklı makaleyi inceleyin.

<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 izin türünde hem erişim jetonu hem de yenileme jetonu oluşturulduğunu unutmayın. Ö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> yanlış olarak ayarlanırsa politika 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, örtülü izin türü akışını kullanarak nasıl erişim jetonu isteğinde bulunacağınız açıklanmaktadır. OAuth 2.0 erişim izni türlerine giriş için OAuth 2.0'a giriş başlıklı makaleyi inceleyin.

Ö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 varsayılanı, bu /token uç noktasına eklenen OAuthV2 politikasındaki <ResponseType>, <ClientId> ve <RedirectUri> öğelerini yapılandırarak değiştirmek mümkündür. Ayrıntılar için OAuthV2 politikası başlıklı makaleyi inceleyin.

Kullanıcı kimlik bilgileri genellikle bir LDAP hizmeti çağrısı veya JavaScript politikası kullanılarak kimlik bilgisi 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: Bu parametre, istemci geliştirici uygulaması kaydedilirken geri çağırma URI'si sağlanmadıysa zorunludur. İstemci kaydı sırasında bir geri çağırma URL'si sağlanmışsa bu değerle karşılaştırılır ve tam olarak eşleşmesi gerekir.

İsteğe bağlı parametreler

  • state: Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahteciliği saldırılarını önlemek için kullanılır.
  • scope: Bası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 için temel kimlik doğrulama gerekmez. Burada açıklandığı gibi, 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ını yürütü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ışıyla ilgili 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 için OAuthV2 politikası başlıklı makaleyi inceleyin.

<?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 302 Konum yönlendirmesi döndürür. Yönlendirme, redirect_uri parametresinde belirtilen URL'ye yönlendirir ve erişim jetonu ile jetonun geçerlilik bitiş zamanı eklenir. Örtülü yetkilendirme türünün yenileme jetonlarını desteklemediğini unutmayın. Örneğin:

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

<GenerateResponse> yanlış olarak ayarlanırsa politika 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 isteğinde bulunmadan ö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'

Burada, /oauth/authorize proxy uç noktasına bir OAuthV2 GenerateAuthorizationCode politikası eklenir (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 varsayılanı, bu /authorize uç noktasına eklenen OAuthV2 politikasındaki <ResponseType>, <ClientId> ve <RedirectUri> öğelerini yapılandırarak değiştirmek mümkündür. Ayrıntılar için OAuthV2 politikası başlıklı makaleyi inceleyin.

  • 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 değil) 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 oluşturulan yetkilendirme kodunu gönderdiği URL'dir. Ayrıca 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 sahteciliği saldırılarını önlemek için kullanılır.
  • scope: Bası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 istekte kayıtlı istemci uygulamasının istemci kimliği sağlanmalıdır.

Örnek uç nokta

Aşağıda, yetkilendirme kodu oluşturmaya yönelik örnek bir uç nokta yapılandırması 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ı başlıklı makaleyi inceleyin.

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

İadeler

<GenerateResponse> etkinleştirildiğinde politika, yetkilendirme kodu eklenmiş olarak ?code sorgu parametresini redirect_uri (geri çağırma URI'si) konumuna döndürür. Yanıtın Location üstbilgisindeki URL ile 302 tarayıcı yönlendirmesi üzerinden gönderilir. Örneğin: ?code=123456.

<GenerateResponse>, false olarak ayarlanırsa politika 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 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 üstbilgisini kodlama hakkında bilgi için "Temel kimlik doğrulama kimlik bilgilerini kodlama" başlıklı makaleye 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.

Politika, varsayılan olarak 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 üzere OAuthV2 politikasındaki <GrantType> ve <RefreshToken> öğelerini kullanabilirsiniz. Ayrıntılar için OAuthV2 politikası başlıklı makaleyi inceleyin.

İsteğe bağlı parametreler

  • state: Yanıtla birlikte geri gönderilecek bir dize. Genellikle siteler arası istek sahteciliği saldırılarını önlemek için kullanılır.
  • scope: Bası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ğini ve istemci gizli anahtarını, temel kimlik doğrulama üstbilgisi (Base64 kodlu) veya form parametreleri client_id ve client_secret olarak iletmeniz gerekir. Ayrıca "Temel kimlik doğrulama bilgilerini kodlama" başlıklı makaleye de bakın.

Erişim jetonu yenilenirken kullanıcının kimliği yeniden doğrulanmaz.

Yenileme jetonu kullanarak erişim jetonu oluşturmaya yönelik örnek bir uç nokta yapılandırması aşağıda verilmiştir. RefreshAccessToken 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 yetkilendirme türünü kabul edecek şekilde yapılandırılmış temel bir RefreshAccessToken politikasıdır. Bu politikayla yapılandırabileceğiniz isteğe bağlı yapılandırma öğeleri hakkında bilgi için OAuthV2 politikası başlıklı makaleyi inceleyin.

<?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 yetkilendirme türü hem erişim hem de yeni yenileme jetonlarının oluşturulmasını 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 oluşturulduktan sonra orijinal jetonun artık geçerli olmadığını bilmeniz gerekir.

Yukarıdaki yanıt, <GenerateResponse> "true" olarak ayarlandığında aldığınız yanıttır. <GenerateResponse> yanlış olarak ayarlanırsa politika yanıt döndürmez. Bunun yerine, aşağıdaki bağlam (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.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 bilgilerini kodlama

Jeton veya yetkilendirme kodu istemek için bir API çağrısı yaptığınızda, IETF RFC 2617'de açıklandığı gibi client_id ve client_secret değerlerini HTTP-Basic Authentication üstbilgisi olarak iletmek iyi bir uygulamadır ve OAuth 2.0 spesifikasyonu tarafından önerilir. Bunu yapmak için iki değeri iki nokta üst üste ile ayırarak birleştirme işleminin sonucunu base64 ile kodlamanız gerekir.

Sözde kodda:

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

Bu örnekte, ns4fQc14Zg4hKFCNaSzArVuwszX95X istemci kimliği, ZIjFyTsNgQNyxI ise istemci gizli anahtarıdır.

Base64 kodlu değeri hesaplamak için kullandığınız programlama dilinden bağımsız olarak, verilen istemci kimlik bilgileri için Base64 kodlu sonuç şöyledir: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

Ardından, jeton isteğini aşağıdaki gibi yapabilirsiniz:

$ 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 Basic üstbilgisini oluşturur. Aşağıdaki ifade yukarıdakiyle 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ında, base64 kodlu başlığı otomatik olarak oluşturan benzer kısayollar olabilir.

Veritabanındaki jetonlardan karma oluşturma

Veritabanı güvenlik ihlali durumunda OAuth erişim ve yenileme jetonlarını korumak için Edge kuruluşunuzda otomatik jeton karma oluşturmayı etkinleştirebilirsiniz. Özellik etkinleştirildiğinde Edge, belirttiğiniz algoritmayı kullanarak yeni oluşturulan OAuth erişim ve yenileme jetonlarının karma oluşturulmuş bir sürümünü otomatik olarak oluşturur. (Mevcut jetonların toplu olarak karma oluşturma işlemiyle ilgili bilgiler aşağıda verilmiştir.) Karma oluşturulmamış jetonlar API çağrılarında kullanılır ve Edge, bunları veritabanındaki karma oluşturulmuş sürümlere göre doğrular.

Aşağıdaki kuruluş düzeyindeki özellikler, OAuth jetonu karma oluşturma işlemini kontrol eder.

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

Mevcut karma oluşturma işlemi uygulanmış jetonlarınız varsa ve bu jetonları geçerlilikleri sona erene kadar saklamak istiyorsanız kuruluşunuzda aşağıdaki özellikleri ayarlayın. Burada karma oluşturma algoritması, mevcut algoritmayla (ör. SHA1, eski Edge varsayılanı) eşleşir. Jetonların karma oluşturma işlemi kaldırıldıysa PLAIN değerini kullanın.

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

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

İlgili konular