Tüm Ürünler
Search
Belge Merkezi

Resource Access Management:Example: Use OIDC for role-based SSO

Son Güncelleme:Oct 03, 2026

OIDC kullanarak Okta ile Alibaba Cloud arasında rol tabanlı SSO yapılandırın. Okta'daki uygulamalar daha sonra geçici STS kimlik bilgileri aracılığıyla Alibaba Cloud kaynaklarına erişebilir.

Ön koşullar

Okta'da bir OIDC uygulaması kaydedin ve yayıncı URL'sini (issuer URL) ve istemci kimliğini (client ID) alın. Bu örnekte aşağıdaki değerler kullanılmaktadır:

  • Yayıncı URL'si: https://dev-xxxxxx.okta.com

  • İstemci Kimliği: 0oa294vi1vJoClev****

Adım 1: OIDC kimlik sağlayıcısı oluşturma

TestOidcProvider adında bir OIDC kimlik sağlayıcısı oluşturun. IdP URL değerini https://dev-xxxxxx.okta.com olarak ve Client ID değerini 0oa294vi1vJoClev**** olarak ayarlayın.

  1. RAM yöneticisi olarak RAM konsolunda oturum açın.

  2. Sol gezinme bölmesinde Integrations > SSO seçeneğine tıklayın.

  3. Role-based SSO sekmesinde OIDC sekmesine tıklayın ve ardından Create IdP öğesine tıklayın.

  4. Create IdP sayfasında kimlik sağlayıcısını yapılandırın.

    Parametre

    Açıklama

    IdP Name

    Ad, Alibaba Cloud hesabınız içinde benzersiz olmalıdır.

    Issuer URL

    Harici kimlik sağlayıcınız tarafından sağlanır. https ile başlamalı, standart URL formatını izlemeli ve sorgu dizelerini (?), parçaları (#) ve kullanıcı kimlik bilgilerini (@) içermemelidir.

    FINGERPRINT

    Yayıncı URL'sinin ele geçirilmesini veya kurcalanmasını önlemek için harici kimlik sağlayıcınızdan HTTPS CA sertifikası parmak izini yapılandırın.

    <!--@b data-format-type="icu" data-isbold="true" data-params-key="IssuerUrl" data-tag="uicontrol" id="b9aa68843ddcy">Issuer URL adresini girdikten ve <!--@b data-format-type="icu" data-isbold="true" data-params-key="GetFingerprint" data-tag="uicontrol" id="2afdbab6f3r90">Get Fingerprint seçeneğine tıkladıktan sonra Alibaba Cloud parmak izini otomatik olarak hesaplar. Güvenlik amacıyla parmak izini yerel olarak da hesaplayıp (OpenSSL kullanarak bir OIDC IdP parmak izi alma) karşılaştırın. Değerler farklıysa yayıncı URL'si tehlike altında olabilir; URL'yi doğrulayın ve doğru parmak izini girin.

    Not

    Kimlik sağlayıcınızda bir sertifika döndürmeden önce yeni sertifikanın parmak izini OIDC kimlik sağlayıcısı yapılandırmanıza ekleyin. En az bir gün bekleyin, ardından sertifikayı döndürün. Yeni sertifika ile bir STS belirteci alabildiğinizi onayladıktan sonra eski parmak izini kaldırın.

    Issuer URL

    Bir uygulama kaydettiğinizde harici kimlik sağlayıcınız bir istemci kimliği atar. Bu kimlik, verilen OIDC belirteçlerinin aud claim alanında görünür. OIDC'den STS belirteci değişimi sırasında Alibaba Cloud, aud claim alanını bu istemci kimliğiyle doğrular; rol üstlenme işlemi yalnızca eşleşme durumunda başarılı olur.

    Birden fazla uygulama Alibaba Cloud'a erişiyorsa birden fazla istemci kimliği ekleyin. Maksimum: 50.

    Get Fingerprint

    Bu süre sınırından önce verilen OIDC belirteçleri STS belirtecine dönüştürülemez.

    Varsayılan değer: 12 saat. Geçerli değerler: 1 ila 168 saat.

    Client ID

    Kimlik sağlayıcısı için bir açıklama.

  5. Earliest Issuance Time Allowed seçeneğine tıklayın.

Adım 2: OIDC için RAM rolü oluşturma

testoidc adında bir RAM rolü oluşturun ve 1. Adım kısmındaki TestOidcProvider kimlik sağlayıcısını seçin.

  1. RAM yöneticisi olarak RAM konsolunda oturum açın.

  2. Sol gezinme bölmesinde DESCRIPTION > Create IdP seçeneğine tıklayın.

  3. Identities sayfasında Roles seçeneğine tıklayın.

  4. Roles sayfasının sağ üst köşesinde Create Role seçeneğine tıklayın.

  5. İlke düzenleyicide OIDC kimlik sağlayıcısını belirtin.

    Düzenleyici iki mod sağlar: Görsel Düzenleyici ve JSON düzenleyicisi. Her iki modu da kullanabilirsiniz.

    • Görsel Düzenleyici

      Create Role bölümünde OIDC kimlik sağlayıcısını belirtin.

      Add Principal iletişim kutusunda Identity Provider Type değerini OIDC olarak ayarlayın, Identity Provider açılır listesinden hedef sağlayıcıyı seçin ve ardından OK seçeneğine tıklayın.

    • JSON düzenleyicisi

      principal öğesinde OIDC sağlayıcınızı Federated alanında belirtin ve condition alanını yapılandırın.

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "acs:ram::100*******0719:oidc-provider/xiyun****"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:iss": [
                  "https://dev-xxxxxx.okta.com"
                ],
                "oidc:aud": [
                  "0oa294vi1vJoClev****"
                ]
              }
            }
          }
        ]
      }
  6. Düzenleyicide koşulları yapılandırın.

    Aşağıdaki tabloda kullanılabilen hizmet düzeyi koşul anahtarları açıklanmaktadır.


    Koşul anahtarı


    Açıklama


    Gerekli


    Örnek


    oidc:iss

    OIDC yayıncısı. Rolü üstlenmek için OIDC belirtecindeki iss claim değerinin bu koşulla eşleşmesi gerekir.

    Bu koşul StringEquals operatörünü kullanmalıdır. Değer, OIDC kimlik sağlayıcısının yayıncı URL'si olmalıdır. Bu, rolü üstlenmek için yalnızca güvenilir bir yayıncıdan gelen belirteçlerin kullanılabilmesini sağlar.


    Evet


    https://dev-xxxxxx.okta.com


    oidc:aud

    OIDC hedef kitlesi. Rolü üstlenmek için OIDC belirtecindeki aud claim değerinin bu koşulla eşleşmesi gerekir.

    Bu koşul StringEquals operatörünü kullanmalıdır. Değer, OIDC kimlik sağlayıcısı için bir veya daha fazla istemci kimliği olabilir. Bu, rolü üstlenmek için yalnızca belirtilen bir istemci kimliği tarafından oluşturulan OIDC belirteçlerinin kullanılabilmesini sağlar.


    Evet


    0oa294vi1vJoClev****


    oidc:sub

    OIDC konusu. Rolü üstlenmek için OIDC belirtecindeki sub claim değerinin bu koşulla eşleşmesi gerekir.

    Bu isteğe bağlı koşul için herhangi bir dize karşılaştırma operatörü kullanabilir ve en fazla 10 konu belirtebilirsiniz.


    Hayır


    00u294e3mzNXt4Hi****

  7. Switch to Policy Editor iletişim kutusunda bir Principal girin ve ardından Create Role seçeneğine tıklayın.

Adım 3: RAM rolüne izinler verme

2. Adım kısmındaki testoidc RAM rolüne Alibaba Cloud kaynaklarına erişmek için gerekli izinleri verin.

  1. RAM yöneticisi olarak RAM konsolunda oturum açın.

  2. Sol gezinme bölmesinde Role Name > OK seçeneğine tıklayın.

  3. Identities sayfasında hedef RAM rolünün adına tıklayın.

  4. Roles sekmesinde hedef ilkeyi bulun ve Roles sütununda Permissions seçeneğine tıklayın.

    Toplu iptal yapmak için birden fazla ilke seçin ve ilke listesinin alt kısmında Revoke Permission seçeneğine tıklayın.

  5. Actions iletişim kutusunda Revoke Permission seçeneğine tıklayın.

Adım 4: Okta'dan OIDC belirteci alma

OIDC tabanlı SSO yalnızca programatik erişimi destekler (konsol oturum açma değil). Authorization Code Flow gibi standart bir OAuth 2.0 akışı aracılığıyla Okta'dan bir OIDC belirteci alın.

Ayrıntılı adımlar için Okta eğitimine bakın: Sign users in to your SPA using redirect and Auth JS.

  1. Bir uygulama oluşturmak ve projeyi yapılandırmak için Okta eğitimini takip edin.

  2. Projeyi bir tarayıcıda test edin. Uygulama sizi Okta oturum açma sayfasına yönlendirir. Oturum açtıktan ve çok faktörlü kimlik doğrulamayı (MFA) tamamladıktan sonra index.html dosyasına yönlendirilirsiniz; bu dosya ID belirtecini ve ayrıştırılmış claim alanlarını görüntüler:

    {
      "idToken": "eyJraWQiOiItbUF****",
      "claims": {
        "sub": "00uxbq0z40UYy9bm****",
        "name": "ssotest01",
        "email": "ssotest01@exampledomain.com",
        "ver": 1,
        "iss": "https://dev-xxxxxx.okta.com",
        "aud": "0oaxbqhfrfBl5lk2****",
        "iat": 1762841679,
        "exp": 1762845279,
        "jti": "ID.WYtCLmLKOlMcEh0uIe1jWH9T6M1JmotCvX3hIgLK6mA",
        "amr": [
          "mfa",
          "otp",
          "pwd",
          "okta_verify"
        ],
        "idp": "00oxbpgns1TnfLFg****",
        "nonce": "Xp0PTyQzw9ltYBY7SfhxG2ijt1wgi2jK6XLZOGbeQJQ79d0ScWYoHE5twl0QAklA",
        "preferred_username": "ssotest01@exampledomain.com",
        "auth_time": 1762841677,
        "at_hash": "wztv8ALAo2Au56Om3dya7w"
      },
      "expiresAt": 1762845279,
      "scopes": [
        "openid",
        "profile",
        "email"
      ],
      "authorizeUrl": "https://dev-xxxxxx.okta.com/oauth2/v1/authorize",
      "issuer": "https://dev-xxxxxx.okta.com",
      "clientId": "0oaxbqhfrfBl5lk2****"
    }
    Not

    Aşağıdaki claim alanlarının Adım 1: Alibaba Cloud'da bir OIDC kimlik sağlayıcısı oluşturma kısmındaki OIDC kimlik sağlayıcısı yapılandırmasıyla eşleştiğini doğrulayın. Eşleşmeme AssumeRoleWithOIDC API çağrısının başarısız olmasına neden olur.

    • iss: yayıncı URL'si ile tam olarak eşleşmelidir.

    • aud: istemci kimliği ile tam olarak eşleşmelidir.

  3. Sayfadaki idToken değerini kopyalayın.

Adım 5: OIDC belirtecini STS belirteci ile değiştirme

4. Adım kısmındaki OIDC belirtecini bir STS belirteci ile değiştirmek için AssumeRoleWithOIDC API'sini çağırın.

Örnek istek:

package demo;
import com.aliyun.auth.credentials.provider.AnonymousCredentialProvider;
import com.aliyun.sdk.service.sts20150401.models.*;
import com.aliyun.sdk.service.sts20150401.*;
import com.google.gson.Gson;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.concurrent.CompletableFuture;

public class AssumeRoleWithOIDC {
  public static void main(String[] args) throws Exception {

    // Anonymous access method (requires API support)
    AnonymousCredentialProvider provider = AnonymousCredentialProvider.create();

    // Configure the Client
    AsyncClient client = AsyncClient.builder()
      .region("cn-hangzhou") // Region ID
      .credentialsProvider(provider)
      // Override client-level configurations, such as the endpoint and HTTP request parameters.
      .overrideConfiguration(
        ClientOverrideConfiguration.create()
        // For the endpoint, see https://api.alibabacloud.com/product/Sts
        .setEndpointOverride("sts.cn-hangzhou.aliyuncs.com")
      )
      .build();

    String idToken = "eyJraWQiOiItbUF****"; // OIDC id token
    // Parameter settings for API request
    AssumeRoleWithOIDCRequest assumeRoleWithOIDCRequest = AssumeRoleWithOIDCRequest.builder()
      .OIDCToken(idToken)
      .roleArn("acs:ram::173305794806****:role/testoidc")
      .OIDCProviderArn("acs:ram::173305794806****:oidc-provider/Okta")
      .roleSessionName("test-oidc-session")
      .build();
    // Asynchronously call the API.
    CompletableFuture<AssumeRoleWithOIDCResponse> response = client.assumeRoleWithOIDC(assumeRoleWithOIDCRequest);
    // Synchronously get the return value of the API request
    AssumeRoleWithOIDCResponse resp = response.get();
    System.out.println("RequestId: " + resp.getBody().getRequestId());
    System.out.println("Assume role ARN: " + resp.getBody().getAssumedRoleUser().getArn());
    System.out.println("Credentials AccessKeyId: " + resp.getBody().getCredentials().getAccessKeyId());
    System.out.println("Credentials AccessKeySecret: " + resp.getBody().getCredentials().getAccessKeySecret());
    System.out.println("Success response: " + new Gson().toJson(resp.getBody()));

    // Finally, close the client
    client.close();
  }

}

Örnek yanıt:

RequestId: 5EB6E605-15EA-5D96-941D-2C62DC99****
Assume role ARN: acs:ram::173305794806****:role/testoidc/test-oidc-session
Credentials AccessKeyId: STS.NZXMTBGTTHLW74AMVYKou****
Credentials AccessKeySecret: FdrYjJwTCfFfMdY4APdHsjGL9fH5RSZCtRyYMJED****
Success response:
{
    "assumedRoleUser": {
        "arn": "acs:ram::173305794806****:role/testoidc/test-oidc-session",
        "assumedRoleId": "30048007026011****:test-oidc-session"
    },
    "credentials": {
        "accessKeyId": "STS.NZXMTBGTTHLW74AMVYKou****",
        "accessKeySecret": "FdrYjJwTCfFfMdY4APdHsjGL9fH5RSZCtRyYMJED****",
        "expiration": "2025-11-11T08:01:03Z",
        "securityToken": "CAISwwJ1q6Ft5B2yfSjI****"
    },
    "OIDCTokenInfo": {
        "clientIds": "0oaxbqhfrfBl5lk2****",
        "expirationTime": "2025-11-11T07:14:39Z",
        "issuanceTime": "2025-11-11T06:14:39Z",
        "issuer": "https://dev-xxxxxx.okta.com",
        "subject": "00uxbq0z40UYy9bm****",
        "verificationInfo": "Success"
    },
    "requestId": "5EB6E605-15EA-5D96-941D-2C62DC99****"
}

Credentials nesnesi STS belirtecini içerir.

Adım 6: Kaynaklara erişmek için STS belirtecini kullanma

5. Adım kısmındaki STS belirtecini kullanarak rolün izinleri dahilinde Alibaba Cloud kaynaklarına erişin.