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

Private Cloud için Edge v4.18.05

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

Uygulama kimlikleri, 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, son kullanıcı kimliğinin mevcut bir jetona veya yeni jetonlara nasıl ekleneceği açıklanmaktadır.

Edge, varsayılan olarak bir OAuth 2.0 erişim jetonu oluşturduğunda jetonun biçimi şudur:

{
  "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şkili 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 kullandığınız uygulama kimliği budur.
  • 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 jetona kullanıcı kimliğini dahil edecek şekilde yapılandırın.

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

Edge'i, son kullanıcı kimliğini jetona dahil edecek şekilde yapılandırdıktan sonra bu kimlik, aşağıda gösterildiği gibi app_enduser alanı olarak 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 alma ve iptal etme API'leri

OAuth jetonlarına kullanıcı kimliğine, uygulama kimliğine 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ğine ve uygulama kimliğine göre alınmasını ve iptal edilmesini etkinleştirmek için aşağıdaki prosedürü uygulayın.

1. adım: Kuruluş için jeton erişim 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ının kuruluşta orgadmin veya opsadmin rolüne sahip olması gerekir. values değerini 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ştaki opsadmin rolü için izinleri ayarlayın

Yalnızca kuruluştaki orgadmin ve opsadmin rollerine, kullanıcı kimliğine veya uygulama kimliğine göre OAuth 2.0 jetonlarını alma (HTTP GET) ve iptal etme (HTTP PUT) izinleri verilmelidir. Erişimi kontrol etmek için bir kuruluşun /oauth2 kaynağında get ve put izinlerini ayarlayın. Bu kaynağın URL'si şu biçimdedir:

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

orgadmin rolü gerekli izinlere zaten sahip olmalıdır. /oauth2 kaynağının opsadmin rolü için izinler şu şekilde olmalıdır:

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

/oauth2 kaynağı için hangi rollerin izinleri olduğunu görmek üzere Tek Kaynaklı API için İzin Al çağrısını kullanabilirsiniz.

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

/oauth2 kaynağı için opsadmin rolüne get ve put izinleri vermek için aşağıdaki curl komutunu kullanın. values değerini kuruluşunuza özel 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

/oauth2 kaynağı için get ve put izinlerini orgadmin ve opsadmin dışındaki rollerden iptal etmek üzere aşağıdaki curl komutunu kullanın. values değerini 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 mülkünü 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 mülk, jeton getirilirken kullanılan sayfa boyutunu belirler. Apigee, 100 değerini önerir ama bu değeri istediğiniz gibi ayarlayabilirsiniz.

Yeni bir kurulumda mülk zaten 100 olarak ayarlanmış olmalıdır. Bu özelliğin değerini değiştirmeniz gerekiyorsa aşağıdaki komutları kullanarak Yönetim Sunucusu'nu ve Mesaj İşlemcisini 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: Jeton oluşturan OAuth 2.0 politikasını son kullanıcı kimliğini içerecek şekilde yapılandırın

Erişim jetonları oluşturmak için kullanılan OAuth 2.0 politikasını, jetona son kullanıcı kimliğini dahil edecek şekilde yapılandırın. Erişim jetonuna son kullanıcı kimliklerini ekleyerek jetonları kimliğe göre alabilir ve iptal edebilirsiniz.

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

Aşağıdaki GenerateAccessTokenClient adlı OAuth 2.0 politikası, bir OAuth 2.0 erişim jetonu oluşturur. Son kullanıcı kimliğini içeren değişkeni belirten <AppEndUser> etiketinin kalın olarak 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 göndererek 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, istek başlığı olarak iletilir. Bir isteğin parçası olarak bilgi iletmenin birçok yolu vardır. Örneğin, alternatif olarak şunları yapabilirsiniz:

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