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.
RAM yöneticisi olarak RAM konsolunda oturum açın.
Sol gezinme bölmesinde seçeneğine tıklayın.
Role-based SSO sekmesinde OIDC sekmesine tıklayın ve ardından Create IdP öğesine tıklayın.
-
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.
httpsile 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.
NotKimlik 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
audclaim alanında görünür. OIDC'den STS belirteci değişimi sırasında Alibaba Cloud,audclaim 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.
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.
RAM yöneticisi olarak RAM konsolunda oturum açın.
Sol gezinme bölmesinde seçeneğine tıklayın.
Identities sayfasında Roles seçeneğine tıklayın.
Roles sayfasının sağ üst köşesinde Create Role seçeneğine tıklayın.
-
İ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ıFederatedalanında belirtin veconditionalanı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****" ] } } } ] }
-
-
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
Örnekoidc:issOIDC yayıncısı. Rolü üstlenmek için OIDC belirtecindeki
issclaim 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.comoidc:audOIDC hedef kitlesi. Rolü üstlenmek için OIDC belirtecindeki
audclaim 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:subOIDC konusu. Rolü üstlenmek için OIDC belirtecindeki
subclaim 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**** 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.
RAM yöneticisi olarak RAM konsolunda oturum açın.
Sol gezinme bölmesinde seçeneğine tıklayın.
Identities sayfasında hedef RAM rolünün adına tıklayın.
-
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.
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.
Bir uygulama oluşturmak ve projeyi yapılandırmak için Okta eğitimini takip edin.
-
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.htmldosyası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****" }NotAş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.
Sayfadaki
idTokendeğ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.