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_codedeğerine ayarlanmalıdır. - code:
/authorizeuç 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_uriparametresi dahil edildiyse bu parametreyi sağlamanız gerekir.redirect_uriparametresi 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_credentialsdeğ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:
passworddeğ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:
tokendeğ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:
codedeğ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_tokendeğ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
- Müşteri kimlik bilgileri atama türünü uygulama
- Yetkilendirme kodu izin türünü uygulama
- API güvenliği online kursu (OAuth dahil)
- OAuthV2 politikası: Yetkilendirme sunucusuna nasıl istekte bulunulacağını ve OAuthV2 politikasının nasıl yapılandırılacağını gösteren birçok örnek içerir.