Kullanıcı kimliği ve uygulama kimliğine göre OAuth 2.0 jetonlarına erişimi etkinleştirin

Bu dokümanda, OAuth 2.0 erişim jetonlarının son kullanıcı kimliği, uygulama kimliği veya her ikisine göre alınmasını ve iptal edilmesinin nasıl etkinleştirileceği açıklanmaktadır.

Uygulama kimlikleri bir OAuth erişim jetonuna otomatik olarak eklenir. Bu nedenle, bir kuruluş için jeton erişimini etkinleştirmek üzere aşağıdaki prosedürü kullandıktan sonra jetonlara uygulama kimliğine göre erişebilirsiniz.

OAuth 2.0 erişim jetonlarını son kullanıcı kimliğine göre almak ve iptal etmek için erişim jetonunda bir son kullanıcı kimliği bulunmalıdır. Aşağıdaki prosedürde, mevcut veya yeni jetonlara son kullanıcı kimliğinin nasıl ekleneceği açıklanmaktadır.

Varsayılan olarak, Edge bir OAuth 2.0 erişim jetonu oluşturduğunda jetonun biçimi şu şekilde olur:

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

Aşağıdakileri göz önünde bulundurun:

  • application_name alanı, jetonla ilişkilendirilen uygulamanın UUID'sini içerir. OAuth 2.0 erişim jetonlarının uygulama kimliğine göre alınmasını ve iptal edilmesini etkinleştirirseniz bu, kullandığınız uygulama kimliği olur.
  • access_token alanı, OAuth 2.0 erişim jetonu değerini içerir.

OAuth 2.0 erişim jetonlarının son kullanıcı kimliğine göre alınmasını ve iptal edilmesini etkinleştirmek için OAuth 2.0 politikasını, aşağıdaki prosedürde açıklandığı gibi kullanıcı kimliğini jetona dahil edecek şekilde yapılandırın.

Son kullanıcı kimliği, Edge'in geliştirici kimliği olarak kullandığı dizedir, geliştiricinin e-posta adresi değildir. Get Developer API çağrısını kullanarak geliştiricinin e-posta adresinden geliştiricinin kimliğini belirleyebilirsiniz.

Edge'i son kullanıcı kimliğini jetona dahil edecek şekilde yapılandırdıktan sonra, aşağıda gösterildiği gibi app_enduser alanına eklenir:

{
  "issued_at" : "1421847736581",
  "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a",
  "scope" : "READ",
  "app_enduser" : "6ZG094fgnjNf02EK",
  "status" : "approved",
  "api_product_list" : "[PremiumWeatherAPI]",
  "expires_in" : "3599",
  "developer.email" : "tesla@weathersample.com",
  "organization_id" : "0",
  "token_type" : "BearerToken",
  "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP",
  "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL",
  "organization_name" : "myorg",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

OAuth 2.0 erişim jetonlarını kullanıcı kimliğine ve uygulama kimliğine göre alacak ve iptal edecek API'ler

OAuth jetonlarına kullanıcı kimliği, uygulama kimliği veya her ikisine göre erişmek için aşağıdaki API'leri kullanın:

Jeton erişimini etkinleştirme prosedürü

OAuth 2.0 erişim jetonlarının son kullanıcı kimliği ve uygulama kimliğine göre alınmasını ve iptal edilmesini etkinleştirmek için aşağıdaki prosedürü kullanın.

1. Adım: Bir kuruluş için jeton erişimi desteğini etkinleştirin

Jeton erişimini her kuruluş için ayrı ayrı etkinleştirmeniz gerekir. OAuth 2.0 erişim jetonlarının son kullanıcı kimliğine veya uygulama kimliğine göre alınmasını ve iptal edilmesini etkinleştirmek istediğiniz her kuruluş için aşağıdaki PUT API'yi çağırın.

Aşağıdaki çağrıyı yapan kullanıcı, kuruluş için kuruluş yöneticisi veya opsadmin rolüne sahip olmalıdır. values öğesini kuruluşunuza özgü değerlerle değiştirin:

curl -H "Content-type:text/xml" -X POST \
  https://management_server_IP;:8080/v1/organizations/org_name \
  -d '<Organization name="org_name">
      <Properties>
        <Property name="features.isOAuthRevokeEnabled">true</Property>
        <Property name="features.isOAuth2TokenSearchEnabled">true</Property>
      </Properties>
    </Organization>' \
  -u USER_EMAIL:PASSWORD

2. Adım: Kuruluşta işlem yöneticisi rolü için izinleri ayarlayın

Kullanıcı kimliğine veya uygulama kimliğine bağlı olarak OAuth 2.0 jetonlarını alma (HTTP GET) ve iptal etme (HTTP PUT) izinleri yalnızca bir kuruluştaki orgadmin ve opsadmin rollerine verilmelidir. Erişimi denetlemek için bir kuruluşun /oauth2 kaynağına alma ve yerleştirme izinlerini ayarlayın. Bu kaynağın şu biçimde bir URL'si var:

https://management_server_IP:8080/v1/organizations/org_name/oauth2

orgadmin rolü zaten gerekli izinlere sahip olmalıdır. /oauth2 kaynağı için opsadmin rolü için izinler aşağıdaki gibi görünmelidir:

<ResourcePermission path="/oauth2">
  <Permissions>
    <Permission>get</Permission>
    <Permission>put</Permission>
  </Permissions>
</ResourcePermission>

Hangi rollerin /oauth2 kaynağı için izinlere sahip olduğunu görmek isterseniz Get Permission for a Single Resource API çağrısını kullanabilirsiniz.

Yanıta göre, /oauth2 kaynak izinlerinde gerekli tüm ayarlamaları yapmak için Kaynak için Bir Role İzin Ekleme ve Kaynak İznini Silme API çağrılarını kullanabilirsiniz.

/oauth2 kaynağında opsadmin rolüne get ve put izinleri vermek için aşağıdaki curl komutunu kullanın. values öğesini kuruluşunuza özgü değerlerle değiştirin:

curl -X POST -H 'Content-type:application/xml' \
  http://management_server_IP:8080/v1/organizations/org_name/userroles/opsadmin/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
      </Permissions>
    </ResourcePermission>' \
  -u USEREMAIL:PASSWORD

orgadmin ve opsadmin dışındaki rollerden /oauth2 kaynağı için get ve put izinlerini iptal etmek üzere aşağıdaki curl komutunu kullanın. values öğesini kuruluşunuza özgü değerlerle değiştirin:

curl -X DELETE -H 'Content-type:application/xml' \
  http://management_server_IP:8080/v1/organizations/org_name/userroles/roles/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions></Permissions>
    </ResourcePermission>' \
   -u USEREMAIL:PASSWORD

3. Adım: oauth_max_search_limit özelliğini ayarlayın

/opt/apigee/customer/application/management-server.properties dosyasındaki conf_keymanagement_oauth_max_search_limit özelliğinin 100 olarak ayarlandığından emin olun:

conf_keymanagement_oauth_max_search_limit = 100

Bu dosya yoksa oluşturun.

Bu özellik, jetonları getirirken kullanılan sayfa boyutunu ayarlar. Apigee, 100 değerini önerir ancak bu değeri istediğiniz gibi belirleyebilirsiniz.

Yeni bir yüklemede, özellik zaten 100 olarak ayarlanmış olmalıdır. Bu özelliğin değerini değiştirmeniz gerekiyorsa şu komutları kullanarak Yönetim Sunucusu'nu ve Mesaj İşleyici'yi yeniden başlatın:

/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

4. Adım: Son kullanıcı kimliğini dahil etmek için jetonlar oluşturan OAuth 2.0 politikasını yapılandırın

Son kullanıcı kimliğini jetona dahil etmek amacıyla erişim jetonları oluşturmak için kullanılan OAuth 2.0 politikasını yapılandırın. Erişim jetonuna son kullanıcı kimlikleri dahil ederek jetonları kimliğe göre alıp iptal edebilirsiniz.

Politikayı erişim jetonuna son kullanıcı kimliği ekleyecek şekilde yapılandırmak için erişim jetonunu oluşturan isteğin son kullanıcı kimliğini içermesi ve son kullanıcı kimliğini içeren giriş değişkenini belirtmeniz gerekir.

Aşağıdaki OAuth 2.0 politikası (GenerateAccessTokenClient) bir OAuth 2.0 erişim jetonu oluşturur. Son kullanıcı kimliğini içeren değişkeni belirten <AppEndUser> etiketinin kalın harflerle eklendiğine dikkat edin:

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient">
    <DisplayName>OAuth 2.0.0 1</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>GenerateAccessToken</Operation>
    <SupportedGrantTypes>
         <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
    <GrantType>request.queryparam.grant_type</GrantType> 
    <AppEndUser>request.header.appuserID</AppEndUser> 
    <ExpiresIn>960000</ExpiresIn>
</OAuthV2>

Ardından, kullanıcı kimliğini appuserID üst bilgisi olarak ileterek OAuth 2.0 erişim jetonunu oluşturmak için aşağıdaki curl komutunu kullanabilirsiniz:

curl -H "appuserID:6ZG094fgnjNf02EK" \
  https://myorg-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials \
  -X POST -d 'client_id=k3nJyFJIA3p62TKIkLO6OJNXFmP&client_secret=gk5K5lIp943AY4'

Bu örnekte, appuserID bir istek başlığı olarak iletilir. Bir istek kapsamında bilgi iletmenin birçok yolu vardır. Örneğin, alternatif olarak:

  • Şu form parametresi değişkeni kullan: request.formparam.appuserID
  • Son kullanıcı kimliğini sağlayan bir akış değişkeni kullanma