Üçüncü Taraf OAuth Jetonlarını Kullanma

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

Bu konuda harici olarak oluşturulan erişim jetonlarını, yenileme jetonlarını veya yetkilendirme kodlarını Edge jeton deposuna nasıl içe aktaracağınızı açıklayacağız. Apigee Edge dışında oluşturulan jetonları doğrulamak için Apigee Edge'i yapılandırmak istiyorsanız bu tekniği kullanabilirsiniz.

Normal durumda Apigee Edge, bir OAuth jetonu oluşturup depolar ve bunu çağıran uygulamaya geri döndürür. Daha sonra çağrı yapan uygulama, hizmet isteğinde bulunurken bu jetonu tekrar Apigee Edge'e sunar. Böylece Apigee Edge, İşlem = VerificationAccessToken ile OAuthV2 politikası aracılığıyla jetonun geçerli olduğunu doğrular. Bu konuda, Apigee Edge'i başka bir yerde oluşturulan OAuth jetonunu depolayacak şekilde ve jeton doğrulama bölümünü aynı tutarak, jetonun Edge tarafından oluşturulmuş gibi nasıl korunabileceğini nasıl yapılandırabileceğiniz açıklanmaktadır.

Örnek

Bu konuda açıklanan tekniği gösteren çalışan bir örnek görmek isterseniz Apigee Yetkilendirilmiş Jeton Yönetimi örneğine göz atın.

Bu nedir?

Mevcut bir yetkilendirme sisteminiz olduğunu ve Edge'in oluşturduğu OAuth2 jetonu veya kod değerlerinin yerine bu sistem tarafından oluşturulan jeton veya kod değerlerini kullanmak istediğinizi varsayalım. Bunun ardından, değiştirilen jeton veya kodla güvenli API proxy istekleri gönderebilirsiniz. Böylece Edge, bunları Edge tarafından oluşturulmuş gibi doğrular.

Biraz Arka Plan Bilgisi

Her zamanki durumda Apigee Edge, rastgele bir harf ve rakam dizisi üreterek bir jeton oluşturur. Apigee Edge bu jetonla, jetonun verildiği saat, süre sonu, jetonun geçerli olduğu API Ürünlerinin listesi ve kapsam gibi diğer verileri ilişkilendirir. Tüm bu bilgiler, İşlem = GenerateAccessToken olarak yapılandırılan OAuthV2 politikası tarafından otomatik olarak oluşturulan bir yanıtta döndürülebilir. Yanıt şu şekilde görünür:

{
  "issued_at": "1469735625687",
  "application_name": "06947a86-919e-4ca3-ac72-036723b18231",
  "scope": "urn://example.com/read",
  "status": "approved",
  "api_product_list": "[implicit-test]",
  "api_product_list_json": ["implicit-test"],
  "expires_in": "1799", //--in seconds
  "developer.email": "joe@weathersample.com",
  "token_type": "BearerToken",
  "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk",
  "access_token": "zBC90HhCGmGlaMBWeZAai2s3za5j",
  "organization_name": "wwitman",
  "refresh_token_expires_in": "0", //--in seconds
  "refresh_count": "0"
}

access_token özelliğinin değeri, yanıt verileri için etkin bir şekilde arama anahtarıdır. Bir uygulama, zBC90HhCGmGlaMBWeZAai2s3za5j hamiline ait jetonu taşıyan ve Edge'de barındırılan bir API proxy'sine istek gönderebilir. İşlem = VerificationAccessToken olan OAuthV2 politikasına sahip Edge, jetonu arar, tüm bilgileri alır ve bu bilgileri kullanarak jetonun istenen API Proxy'si için geçerli olup olmadığını belirler. Bu işleme Jeton doğrulama denir. Yukarıdaki bilgilerin tümü jetonu oluşturur. access_token değeri, bu bilgiyi arama yoludur.

Diğer yandan, burada açıklanan adımları uygulayarak Edge'i bir jeton depolayacak şekilde yapılandırabilirsiniz. Böylece, access_token değeri harici bir hizmet tarafından oluşturulur. Diğer tüm meta veriler aynı olabilir. Örneğin, "TOKEN-<16 rastgele sayı>" biçiminde jetonlar oluşturan, Apigee Edge dışında bir sisteminiz olduğunu varsayalım. Bu durumda, Apigee Edge'in depoladığı tam jeton meta verileri şöyle olabilir:

{
  "issued_at": "1469735625687",
  "application_name": "06947a86-919e-4ca3-ac72-036723b18231",
  "scope": "urn://example.com/read",
  "status": "approved",
  "api_product_list": "[implicit-test]",
  "api_product_list_json": ["implicit-test"],
  "expires_in": "1799", //--in seconds
  "developer.email": "joe@weathersample.com",
  "token_type": "BearerToken",
  "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk",
  "access_token": "TOKEN-1092837373654221",
  "organization_name": "wwitman",
  "refresh_token_expires_in": "0", //--in seconds
  "refresh_count": "0"
}

Bu durumda, bir uygulama Edge'de barındırılan bir API proxy'sine istekte bulunabilir. TOKEN-1092837373654221 hamiline ait jetonu ve Edge, İşlem = VerificationAccessToken ile OAuthV2 politikası aracılığıyla bunu doğrulayabilir. Yetkilendirme kodlarına ve yenileme jetonlarına benzer bir içe aktarma kalıbı uygulayabilirsiniz.

İstemci Kimlik Bilgilerini Doğrulamaktan bahsedelim.

Jeton oluşturmak için ön koşul, istekte bulunan istemciyi doğrulamaktır. Varsayılan olarak, Apigee Edge'deki OAuthV2/GenerateAccessToken politikası, istemci kimlik bilgilerini dolaylı yoldan doğrular. Normalde bir OAuthV2 jetonu isteğinde bulunan client_id ve client_secret, HTTP Temel Yetkilendirmesi ile kodlanan Yetkilendirme üst bilgisinde iletilir (iki nokta üst üste yerleştirilip ardından base64 olarak kodlanır). Apigee Edge'deki OAuthV2/GenerateAccessToken politikası, bu üst bilginin kodunu çözer, client_id'yi arar ve iletilen client_secret'in bu client_id için geçerli olduğunu doğrular. Bu işlem, kimlik bilgileri Apigee Edge tarafından biliniyorsa çalışır. Başka bir deyişle, Apigee Edge'de belirtilen client_id ve client_secret bilgilerini içeren bir kimlik bilgisi içeren bir Geliştirici Uygulaması vardır.

İstemci kimlik bilgilerinin Apigee Edge tarafından doğrulanamaması durumunda, jeton oluşturmadan önce istemciyi başka yöntemlerle açık bir şekilde doğrulamak için API proxy'nizi tasarlamanız gerekir. Bu işlem, genellikle ağınızdaki bir uzak uç noktaya bağlanan ServiceDescription politikası aracılığıyla yapılır.

Örtülü veya açık şekilde, jeton oluşturan API Proxy'sinin öncelikle istemci kimlik bilgilerini doğruladığından emin olmanız gerekir. İstemciyi doğrulamanın, erişim jetonu oluşturmaktan bağımsız olduğunu unutmayın. Apigee Edge'i bu iki işlemi de yapacak veya bu ikisinden birini yapacak ya da hiçbirini yapmayacak şekilde yapılandırabilirsiniz.

Apigee Edge'deki OAuthV2/GenerateAccessToken politikasının, istemci kimlik bilgilerini Edge deposuna göre doğrulamasını istiyorsanız politika yapılandırmasında <ExternalAuthorization> öğesini false olarak ayarlayın veya tamamen çıkarın. İstemci kimlik bilgilerini açık bir şekilde doğrulamak için harici bir yetkilendirme hizmeti kullanmak istiyorsanız <ExternalAuthorization> öğesini true olarak ayarlayın.

Apigee Edge, istemci kimlik bilgilerini doğrulayamasa da client_id'nin Apigee Edge tarafından bilinmesi ve yönetilmesi gerekir. İster Apigee Edge tarafından oluşturulmuş ister harici bir sistem tarafından oluşturulup Apigee Edge'e aktarılmış olsun Apigee Edge'deki her erişim_jetonu, client_id ile belirtilen bir istemci uygulamasıyla ilişkilendirilmelidir. Bu nedenle, Apigee Edge'deki OAuthV2/GenerateAccessToken politikası, client_id ile client_secret eşleşmesini doğrulamadığı durumlarda bile client_id değerinin geçerli, mevcut ve iptal edilmemiş olduğunu doğrular. Bu nedenle, ön koşul olarak bir kurulum adımı olarak, client_id'leri Edge Administration API aracılığıyla içe aktarmanız gerekebilir.

Apigee'de üçüncü taraf OAuth için Politika Akışı

Apigee Edge'de üçüncü taraf OAuth sistemlerindeki jetonları kullanmak için erişim jetonları oluşturma akışı, aşağıdaki kalıplardan birini izlemelidir.

İstemci Kimlik Bilgilerini Harici Doğrulama

  1. Gelen istemci kimlik bilgilerini doğrulamak ve harici jeton edinmek için ServiceCallout adımlarını uygulayın.
  2. Yanıttan harici olarak oluşturulan jetonu çıkarmak için ExtractVariables veya bir JavaScript adımı çıkarın.
  3. oauth_external_authorization_status adlı özel iyi bilinen değişkeni ayarlamak için AssignMessage'ı kullanabilirsiniz. Değerin, istemci kimlik bilgilerinin geçerli olduğunu belirtmek için doğru olması gerekir.
  4. <ExternalAuthorization> öğesi true olarak ve en az <ExternalAccessToken>, <ExternalRefreshToken> ya da <ExternalAuthorizationCode> değerine ayarlanmış OAuthV2/GenerateAccessToken.

İstemci Kimlik Bilgilerini Dahili Doğrulama

  • ServiceCallout aracını kullanabilirsiniz.
  • Yanıttan harici olarak oluşturulan jetonu çıkarmak için ExtractVariables veya bir JavaScript adımı çıkarın.
  • <ExternalAuthorization> öğesi false olarak ve en az <ExternalAccessToken>, <ExternalRefreshToken> ya da <ExternalAuthorizationCode> değerine ayarlanmış OAuthV2/GenerateAccessToken.

Akış ve politika yapılandırmasıyla ilgili notlar

  • İstemci kimlik bilgilerini doğrulamak için harici bir sistem kullanmak isterseniz gerekli olanı yapan bir politika akışı geliştirmek sizin görevinizdir. Normalde, harici olarak tanınan kimlik bilgilerini harici kimlik doğrulama hizmetine göndermek için bir ServiceDescription politikası kullanırsınız. Harici kimlik doğrulama hizmeti genellikle bir yanıt ve kimlik bilgileri geçerliyse erişim jetonu döndürür.

  • ServiceCall'dan sonra API proxy'sinin, geçerlilik durumunu, harici olarak oluşturulan access_token'ı ve muhtemelenrefresh_token'ı çıkarmak için yanıtı ayrıştırması gerekir.

  • OAuthV2/GenerateAccessToken politikasında <StoreToken> öğesini true, <ExternalAuthorization> öğesini ise true veya false değerine uygun şekilde ayarlayın.

    OAuthV2/GenerateAccessToken politikası yürütüldüğünde oauth_external_authorization_status değişkenini okur. Değişken ayarlanmışsa ve değer doğruysa Apigee Edge istemci kimlik bilgilerini doğrulamaya çalışmaz. Değişken ayarlanmamışsa veya değer doğru değilse Apigee Edge, istemci kimlik bilgilerini doğrulamaya çalışır.

  • OAuthV2 politikasında, içe aktarılacak harici verileri belirtmenize olanak tanıyan üç öğe vardır: <ExternalAccessToken>, <ExternalRefreshToken> ve <ExternalAuthorizationCode>. Bu öğelerin her biri bir akış değişkeni kabul eder. Edge politikası, harici olarak oluşturulan erişim jetonunu, yenileme jetonunu veya yetkilendirme kodunu bulmak için bu değişkeni okur. Harici jetonları veya kodları uygun değişkenlere yerleştirmek için politikaları ve mantığı uygulamak size bağlıdır.

    Örneğin, OAuthV2 politikasında yer alan aşağıdaki yapılandırma, Edge'e external_token adlı bağlam değişkeninde jetonu aramasını söyler.

    <ExternalAccessToken>external_token</ExternalAccessToken>
    

    Ayrıca bu değişkeni ayarlayan önceki bir adımınızın olması gerekir.

  • oauth_external_authorization_status değişkenini ayarlamayla ilgili olarak, bu değişkeni ayarlamak için yaygın olarak kullanılan teknik, AtaDeğişken öğesiyle birlikte bir AssignmentMessage politikası kullanmaktır. Örneğin:

    <AssignMessage name="AssignMessage-SetVariable">
        <DisplayName>Assign Message - Set Variable</DisplayName>
        <AssignVariable>
            <Name>oauth_external_authorization_status</Name>
            <Value>true</Value>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    </AssignMessage>
    

    Bu politikanın, İşlem = GenerateAccessToken şeklindeki OAuthV2 politikasından önce olması gerektiğini unutmayın.

Örnek OAuthV2 politikası

Aşağıdaki OAuthV2 politikası, Edge'in external_access_token akış değişkeninde jeton değeri bulduğu sürece bir Apigee Edge erişim jetonu oluşturur.

<OAuthV2 name="OAuth-v20-Store-External-Token">
    <ExternalAccessToken>external_access_token</ExternalAccessToken>
    <ExternalAuthorization>true</ExternalAuthorization>
    <Operation>GenerateAccessToken</Operation>
    <GenerateResponse enabled="true">
        <Format>FORM_PARAM</Format>
    </GenerateResponse>
    <ReuseRefreshToken>false</ReuseRefreshToken>
    <StoreToken>true</StoreToken>
    <SupportedGrantTypes>
        <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <ExpiresIn ref='flow.variable'>2400000</ExpiresIn>
</OAuthV2>

Teoride, bu kalıbı herhangi bir üçüncü taraf OAuth2 yetkilendirme hizmetinde uygulayabilirsiniz.