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

Edge for Private Cloud v. 4.17.05

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şta orgadmin veya opsadmin rolüne sahip olmalıdır. {süslü ayraçlar} içindeki değerleri kuruluşunuza özgü değerlerle değiştirin:

> curl -H "Content-type:text/xml" -X POST \
  https://<ms-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 {userEmail}:{mypassword}

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://<ms-ip>:8080/v1/organizations/{org_name}/oauth2

Kuruluş yöneticisi rolü zaten gerekli izinlere sahip olmalıdır. /oauth2 kaynağı için opsadmin rolü için izinler şu şekilde görünmelidir:

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

Hangi rollerin /oauth2 kaynağı için gerekli izinlere sahip olduğunu görmek amacıyla 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.

opsadmin rolüne /oauth2 kaynağı için get ve put izinleri vermek için aşağıdaki cURL komutunu kullanın. {süslü ayraçlar} içindeki değerleri kuruluşunuza özgü değerlerle değiştirin:

> curl -X POST -H 'Content-type:application/xml' \
  http://<ms-ip>:8080/v1/organizations/{org}/userroles/opsadmin/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions>
        <Permission>get</Permission>
        <Permission>put</Permission>
      </Permissions>
    </ResourcePermission>' \
  -u {USEREMAIL}:{PWD} 

/oauth2 kaynağı için get ve put izinlerini orgadmin ve opsadmin dışındaki rollerden iptal etmek için aşağıdaki cURL komutunu kullanın. {süslü ayraçlar} içindeki değerleri kuruluşunuza özgü değerlerle değiştirin:

> curl -X DELETE -H 'Content-type:application/xml' \
  http://<msip>:8080/v1/organizations/{org-name}/userroles/{roles}/permissions \
  -d '<ResourcePermission path="/oauth2">
      <Permissions></Permissions>
    </ResourcePermission>' \
   -u {USEREMAIL}:{PWD} 

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 karakterlerle eklendiğini unutmayın:

<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 aşağıdaki cURL komutunu kullanarak OAuth 2.0 erişim jetonu oluşturabilir ve kullanıcı kimliğini appuserID üst bilgisi olarak iletebilirsiniz:

> 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 şunları yapabilirsiniz:

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