Tüm Ürünler
Search
Belge Merkezi

Identity as a Service:Integrate SSO by OIDC

Son Güncelleme:Oct 09, 2026

IDaaS, özel uygulamalarınız için tek oturum açma (SSO) özelliğini uygulamak üzere OpenID Connect (OIDC) yetkilendirme kodu akışını kullanır. Uygulamanız, tam SSO akışını tamamlamak için iki uç nokta ile etkileşime girer: yetkilendirme uç noktası ve belirteç uç noktası. Kimlik doğrulama sürecinin tamamı IDaaS tarafından yönetilir; uygulamanızın yalnızca sonucu işlemesi gerekir.

Çalışma Mantığı

Aşağıdaki adımlar, uygulamanız, kullanıcının tarayıcısı ve IDaaS arasındaki OIDC yetkilendirme kodu akışını özetler:

  1. Uygulamanız tarayıcıyı IDaaS yetkilendirme uç noktasına yönlendirir.

  2. IDaaS oturum açma sayfasını görüntüler. Kullanıcı kimliğini doğrular.

  3. IDaaS, tarayıcıyı bir yetkilendirme code ile birlikte redirect_uri adresinize geri yönlendirir.

  4. Uygulamanız, IDaaS belirteç uç noktasını çağırarak code değerini belirteçlerle değiştirir.

  5. Uygulamanız ID Belirtecini doğrular ve kullanıcının oturumunu oluşturur.

Not

OIDC 1.0, OAuth 2.0'ın üzerine bir kullanıcı kimliği katmanı ekler ve OAuth 2.0 yetkilendirme kodu akışıyla geriye dönük olarak uyumludur. Temel fark, belirteç uç noktasının kullanıcı kimliği taleplerini içeren bir ID Belirteci de döndürmesidir.

Ön Koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

  • Bir IDaaS örneği

  • IDaaS içinde oluşturulmuş özel bir uygulama veya OIDC tabanlı bir uygulama (bkz. Özel uygulamalar)

  • Uygulamanız için client_id ve client_secret değerleri (Applications sayfasının General sekmesinde bulunur)

OIDC ile SSO Entegrasyonu

1. Adım: Uygulama kimlik bilgilerinizi alın

Applications sayfasında uygulamanızı tıklayın ve General sekmesini açın. client_id ve client_secret değerlerini not edin; bu değerler sonraki tüm API istekleri için gereklidir.

Kimlik bilgilerini döndürmek veya yönetmek için bkz. Genel yapılandırmalar.

2. Adım: Yetkilendirme uç noktasına istek gönderin

Bir kullanıcı etkin oturumu olmadan uygulamanıza eriştiğinde, tarayıcıyı aşağıdaki parametrelerle IDaaS yetkilendirme uç noktasına yönlendirin.

Yetkilendirme uç noktası URL'sini Applications sayfasında bulabilirsiniz: Uygulamanızı tıklayın, Sign-In sekmesini açın ve Application Settings bölümüne bakın.

Yönlendirme URL'sini aşağıdaki gibi oluşturun:

{{Authorization Endpoint}}?
  client_id=app_***&
  redirect_uri=http%3A%2F%2Flocalhost%3A3000%2F***&
  response_type=code&
  scope=openid&
  state=525f49cc-***


Parametre


Gerekli


Örnek


Açıklama


client_id


Evet


app_michs7r****6pye


General sekmesindeki istemci kimliği.


scope


Evet


openid email profile


Hangi kullanıcı niteliklerinin döndürüleceğini kontrol eder. Özel uygulamalar için varsayılan: openid email profile. OIDC tabanlı uygulamalar ayrıca phone talep edebilir. Bkz. Kapsam ve alan eşlemesi.


response_type


Evet


code


Yetkilendirme kodu akışını kullanmak için code olmalıdır.


redirect_uri


Evet


http://localhost:3000/user/oauth2/aliyunidaas/callback


IDaaS'ın kullanıcı oturum açtıktan sonra yetkilendirme kodunu gönderdiği URL.


state


Hayır (önerilir)


525f49cc-87c4-4655-b79c-4c4f971b1ad1


Oluşturduğunuz rastgele bir dize. IDaaS bu değeri değiştirmeden geri döndürür. Yanıtın aynı oturumdan geldiğini doğrulamak ve Siteler Arası İstek Sahteciliği (CSRF) saldırılarını önlemek için bunu kullanın. En az 32 karakter kullanın.

Önemli

IDaaS uygulamanıza geri yönlendirdiğinde state değerini her zaman doğrulayın. Döndürülen state değerinin gönderdiğiniz değerle eşleşmediği yanıtları reddedin.

3. Adım: Oturum açma geri aramasını işleyin

Kullanıcı kimliğini doğruladıktan sonra IDaaS, redirect_uri adresinize 302 yönlendirmesi gerçekleştirir:

{{redirect_uri}}?
  code=CO***&
  state=525f49cc-***


Parametre


Örnek


Açıklama


code


COE59pkCTm4A9nmowJUsfsfarGEaiShj3TuDc7NCzLCYu9


Yetkilendirme kodu. Bir sonraki adımda belirteç istemek için bunu kullanın.


state


525f49cc-87c4-4655-b79c-4c4f971b1ad1


Devam etmeden önce bu değerin 2. Adımda gönderdiğiniz değerle eşleştiğini doğrulayın.

IDaaS, DingTalk QR kodu ve SMS dahil olmak üzere birden çok kimlik doğrulama yöntemini destekler. Tam liste için bkz. Genel yapılandırma.

4. Adım: Yetkilendirme kodunu belirteçlerle değiştirin

state değerini doğruladıktan sonra, belirteç uç noktasına bir POST isteği göndererek yetkilendirme kodunu belirteçlerle değiştirin. Belirteç uç noktası URL'sini, yetkilendirme uç noktasıyla aynı Application Settings bölümünde bulabilirsiniz.

POST /v2/<instance_id>/<app_id>/oauth2/token HTTP/1.0
Host: eiam-api-cn-hangzhou.aliyuncs.com
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
  &code=n0esc3N*****5acc3f0ogp4
  &client_id=s6BhdR*****kqt3
  &client_secret=7Fjfp0ZBr1*****KtDRbnfVdmIw
  &redirect_uri=http%3A%2F%2Fwww.example.com%2Fsso%2Fcallback

Başarılı bir yanıt hem bir erişim belirteci hem de bir ID Belirteci içerir:

{
  "token_type": "Bearer",
  "access_token": "ATM4SoVDqWgUq***********wk3ZS5mtn6fcSp8NH8",
  "expires_in": 1200,
  "expires_at": 1644843164,
  "id_token": "eyJraWQiOiJLRVkyV************gRIadj-frOIRFChA"
}
Önemli

Belirteçlerde kullanılabilen kullanıcı nitelikleri, 2. Adımda talep ettiğiniz scope değerlerine göre belirlenir.

Kullanıcının oturumunu oluşturmak için aşağıdaki yaklaşımlardan birini kullanın:

5. Adım: ID Belirtecini ayrıştırın ve doğrulayın

ID Belirteci, RS256 ile imzalanmış bir JSON Web Token'dır (JWT). Düz metin olarak kullanıcı kimliği talepleri ve içeriğe güvenmeden önce doğrulamanız gereken bir İmza içerir.

Önemli

İmza doğrulaması zorunludur. İmzasını önceden doğrulamadan bir ID Belirtecindeki talepleri kullanmayın.

Ham belirteç yapısını incelemek için id_token değerini jwt.io adresine yapıştırın. Kodu çözülmüş bir belirteç şu şekilde görünür:

{
  "kid": "KEY2Ty1qL6u21NGKmccv3jwfd2ndmgtQPnag",
  "alg": "RS256"
}.{
  "sub": "user_uyvefotjn7kpbejfmxoos3rtmm",
  "jti": "jwt_aaaac7xyhclac6aqkgtjaxsthw5yotn5d77pmki",
  "iss": "https://pre-eiam-api-cn-hangzhou.aliyun-inc.com/v2/********/oidc",
  "iat": 1644841965,
  "nbf": 1644841965,
  "exp": 1644842265,
  "aud": "app_mhylgo3iairjqjdx5eop6uaf34",
  "at_hash": "XHEaGpMooM9zvQXaMzCNEA",
  "name": "testuser",
  "preferred_username": "testuser"
}.[Signature]

İmza doğrulaması için genel anahtarı alın

İmzayı doğrulamadan önce IDaaS'tan JSON Web Key (JWK) genel anahtarını alın. Genel anahtar uç noktası URL'sini Application Settings bölümünde (diğer uç noktalarla aynı konumda) bulabilirsiniz.

Uç noktayı çağırmak bir anahtar kümesi döndürür:

{
  "keys": [
    {
      "kty": "RSA",
      "e": "AQAB",
      "use": "sig",
      "kid": "KEYkYnc55G********CTvT7So44RGDYdbfs",
      "n": "pXmYkIpy1vaNjTMclU86BQjfmDhjlqMAX8ySVvh9gO-nae4ayvG_*********-v4gP27T7u6bUy0GXTlh3eKE0v1LYB81nfqjF2uazlPwPR5yYOhhWcK-gMNByLfE3CnkDc1YGwA3dZmIz-ZjOCKy8xLaBuqjrvwn5tpMpAoYEEaH4jIm7unTdhbKEKspNR-UXKD8q9RppMh5Tn2sB6oPHlQANudJDgqSwEOevIrdmHU0Zqxrb9cscGH9hH0QjmYEu72yI8BVeliPo3jK6JIoqCIcj5K_t8BJlFQ9QLJ8_o9tmd3BFv5_LVsh4BKGw"
    }
  ]
}

İmzayı doğrulayın

ID Belirtecini ayrıştırmak ve doğrulamak için jwt.io kitaplık listesinden bir JWT kitaplığı kullanın. Aşağıdaki örnek, Java kitaplığı org.bitbucket.b_c:jose4j kullanır.

Maven bağımlılığını ekleyin:

<dependency>
  <groupId>org.bitbucket.b_c</groupId>
  <artifactId>jose4j</artifactId>
  <version>0.7.12</version>
</dependency>

Çalıştırmadan önce issuer, appId, jwkJson ve jwt değerlerini IDaaS uygulamanızdaki gerçek değerlerle değiştirin:

import org.jose4j.jwk.JsonWebKey;
import org.jose4j.jwk.JsonWebKeySet;
import org.jose4j.jwt.JwtClaims;
import org.jose4j.jwt.consumer.JwtConsumer;
import org.jose4j.jwt.consumer.JwtConsumerBuilder;

public class IdTokenTest {

    public static void main(String[] args) throws Exception {
        // EIAM's Issuer identifier (OIDC issuer URL)
        String issuer = "https://eiam-api-cn-hangzhou.aliyuncs.com/v2/idaas_padyrlux3mphrlsex4uonyqhxu/**********/oidc";
        // The unique identifier of the current application (obtained from EIAM)
        String appId = "app_mkif4*****pxpzbasqmu";
        // Application public key in JSON format, used to verify the JWT signature
        String jwkJson = "{\n" + "  \"keys\": [\n" + "    {\n" + "      \"kty\": \"RSA\",\n" + "      \"e\": \"AQAB\",\n" + "      \"use\": \"sig\",\n" + "      \"kid\": \"KEY2H82C2at57itnW4onT3p1ySjwH4nirjCk\",\n" + "      \"n\": \"w7Jl3fAUJp_9GuxV*****QsOA4lnXR5OD4kF4QbIeBiDiH8_MThrFi9k2MB6YMkSzf5JfIkpAS3JCqZ7k6Wooydp4pzaZNZAk3SGzdsa022RmAT" + "-Iayi4Yj6J9tSdTQCjwh2XkzzsIxA_Hla8rWiQ8Vhw1" +
            "-7QArgObfe67nSR7LxD55MFLxk9FU0*****RlGhrQGE_0LUuGWtCJG1r1e6aKquyswfxxAr3Rvj8QGIeJrG0R1Pv8m8d1_5OdULhB7149VqjM6D98WFjab0U2SNv0UlREZXTcS4p-2QNm_1egYRRpJEY_00FZqNSYsmErMGepYhO_61KoGqd8cphWQ\"\n" + "    }\n" + "  ]\n" + "}";
        String jwt = "eyJraWQiOiJLRVkySDgyQzJhdD*****uaXJqQ2siLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ1c2Vy*****lmNjRjZjR3amFrbnBieGpjd3V1IiwianRpIjoiand0X2FhYWFkYWllYTc2eWg1cW0zcm11bnoyeGg0eHd5aTJzZHBoNjR6aSIsImlzcyI6Imh0dHBzOi8vZWlhbS1hcGktY24taGFuZ3pob3UuYWxpeXVuY3MuY29tL3YyL2lkYWFzX3BhZHlybHV4M21waHJsc2V4NHVvbnlxaHh1L2FwcF9ta2lmNGR3bHBlaDZkbnM0cHhwemJhc3FtdS9vaWRjIiwiaWF0IjoxNjUzNjMwMDQxLCJuYmYiOjE2NTM2MzAwNDEsImV4cCI6MTY1MzYzMDM0MSwiYXVkIjoiYXBwX21raWY0ZHdscGVoNmRuczRweHB6YmFzcW11IiwibmFtZSI6InRlc3QiLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ0ZXN0IiwidXBkYXRlZF9hdCI6MTY1MzYyODU5MH0.pAsUNB8OkdpIxJMZRfLJ7Pa31tsJyl44a1jVIlvdQxwOtPULAwrFxnB0X3eQx89hUGCdvYWl9FO9o-5kT7L-RER0wJYz9YNKqrVNBnaRwINRZyeYLRVurWMMzODQz-V0ULd9raM1M_i2f_SoWFs1gPFtYh_ijUARHISi7Q3q93ZfAuY8Lq2Nq07QunmDbosvioUd5wJG7WCxW5XXZYDUQe9p5IEYd1MSvnWuTOLbg7rKn0Vm4dNYGWjz1WuoAyCsc_QxOCqpmQ_2czoqPeN-SvPJAQ2CykLk7DSnGpABw1aNrjDidLS9Beqsga9VDCth86sk_0lyTZOaORtUrfVTtQ";
        // Parse JWK public key set
        JsonWebKeySet jsonWebKeySet = new JsonWebKeySet(jwkJson);
        // Create JWT validator
        JwtConsumer jwtConsumer = createJwtConsumer(jsonWebKeySet, issuer, appId);
        // Execute signature verification and parse claims
        JwtClaims jwtClaims = jwtConsumer.processToClaims(jwt);
        // Prints the user information from the ID Token
        System.out.println(jwtClaims);
    }

    public static JwtConsumer createJwtConsumer(JsonWebKeySet jsonWebKeySet, String issuer, String appId) {
        // Configure JWT validator using builder pattern
        final JwtConsumerBuilder jwtConsumerBuilder = new JwtConsumerBuilder();
        jwtConsumerBuilder.setExpectedIssuer(issuer);
        jwtConsumerBuilder.setRequireIssuedAt();
        jwtConsumerBuilder.setRequireExpirationTime();
        jwtConsumerBuilder.setAllowedClockSkewInSeconds(60);
        jwtConsumerBuilder.setExpectedAudience(appId);
        // Set public key resolver (match JWK by kid)
        jwtConsumerBuilder.setVerificationKeyResolver((jws, nestingContext) -> {
            // Get kid from JWT header
            final String signKeyId = jws.getKeyIdHeaderValue();
            // Find the matching key in the JWK set
            for (JsonWebKey jsonWebKey : jsonWebKeySet.getJsonWebKeys()) {
                if (signKeyId.equals(jsonWebKey.getKeyId())) {
                    return jsonWebKey.getKey();
                }
            }
            throw new RuntimeException("Cannot find verification key: " + signKeyId);
        });
        return jwtConsumerBuilder.build();
    }
}

Başarılı bir çalıştırma, doğrulanmış talepleri çıktılar:

JWT Claims Set:{sub=user_dt6kj6yf64cf4wjaknpbxjcwuu,
                jti=jwt_aaaadaiea76yh5qm3rmunz2xh4xwyi2sdph64zi,
                iss=https://eiam-api-cn-hangzhou.aliyuncs.com/v2/idaas_padyrlux3mphrlsex4uonyqhxu/app_**********/oidc,
                iat=1653630041,
                nbf=1653630041,
                exp=1653630341,
                aud=app_**********,
                name=test,
                preferred_username=test,
                updated_at=1653628590
               }

6. Adım: UserInfo uç noktasından kullanıcı bilgilerini alın

ID Belirtecini ayrıştırmaya alternatif olarak, erişim belirtecini kullanarak UserInfo uç noktasını çağırın. Uç nokta, RFC6750 standardını izler.

UserInfo uç noktası URL'sini Application Settings bölümünde bulabilirsiniz.

GET /v2/<instance_id>/<app_id>/oauth2/userinfo HTTP/1.0
Host: eiam-api-cn-hangzhou.aliyuncs.com
Authorization: Bearer <AccessToken>

Örnek yanıt:

{
    "sub": "user_dt6kj6yf64cf4wjaknpbxjcwuu",
    "name": "test",
    "preferred_username": "test",
    "updated_at": 1653899948
}
Not

UserInfo uç noktası, uygulama için yapılandırılan genişletilmiş talepler dahil olmak üzere ID Belirteciyle aynı alanları döndürür.

Gelişmiş Ayarlar

OIDC keşif uç noktası

IDaaS, OpenID Connect Discovery 1.0 standardını destekler. Bir uygulama için Yayıncı URL'si aşağıdaki biçimi kullanır:

https://<idaas-api-domain>/v2/<instance_id>/<application_id>/oidc


Parametre


Açıklama


Örnek


idaas-api-domain


Kullanıcı portalı alan adı


******.aliyunidaas.com


instance_id


Örnek Kimliği


idaas_m********r2ed22e6m


application_id


Uygulama Kimliği


app_m********jy6rbau

Keşif uç noktasını almak için Yayıncı URL'sine /.well-known/openid-configuration ekleyin. Çağrıldığında tüm mevcut uç noktaları döndürür:


Uç Nokta


Açıklama


authorization_endpoint


Yetkilendirme uç noktası


token_endpoint


Belirteç uç noktası


userinfo_endpoint


UserInfo uç noktası


revocation_endpoint


Belirteç iptal uç noktası


jwks_uri


JWK genel anahtar uç noktası


device_authorization_endpoint


Cihaz yetkilendirme uç noktası (yalnızca OIDC tabanlı uygulamalar için; özel uygulamalar şu anda cihaz kodu akışıyla oturum açmayı desteklemez)

Tüm uç nokta URL'lerine doğrudan Application Settings bölümünden de erişilebilir.

Kapsam ve alan eşlemesi

Aşağıdaki tabloda, her bir scope değeri için hangi ID Belirteci taleplerinin döndürüldüğü gösterilmektedir.


Alan


Kapsam


Açıklama


sub


openid


Kullanıcı Kimliği


jti


openid


JWT Kimliği (yardımcı)


iss


openid


Belirteç yayıncısı (yardımcı)


iat


openid


Belirteç düzenleme zamanı (yardımcı)


nbf


openid


Belirteç geçerlilik başlangıç zamanı (yardımcı)


exp


openid


Belirteç sona erme zamanı (yardımcı)


aud


openid


Uygulama istemci kimliği (yardımcı)


at_hash


openid


Erişim belirteci karması (yardımcı)


phone_number


phone


Telefon numarası, örn. +86 130****5678


phone_number_verified


phone


Telefon numarasının doğrulanıp doğrulanmadığı. Varsayılan olarak doğrulanmıştır.


email


email


E-posta adresi, örn. al***@example.com


email_verified


email


E-posta adresinin doğrulanıp doğrulanmadığı. Varsayılan olarak doğrulanmıştır.


name


profile


Görüntülenen ad


preferred_username


profile


Kullanıcı adı


updated_at


profile


Son profil güncelleme zamanı

Belirteç uç noktası kimlik doğrulama yöntemleri

IDaaS, keşif uç noktasının token_endpoint_auth_methods_supported alanında belirtildiği gibi belirteç uç noktası için dört kimlik doğrulama yöntemini destekler.


Yöntem


Açıklama


none


Herkese açık istemciler için. client_credentials izin türü ile kullanılamaz.


client_secret_basic


RFC 6749 uyarınca.


client_secret_post


RFC 6749 uyarınca.


client_secret_jwt


OpenID Connect Core 1.0 uyarınca.

Aşağıdaki örnek, client_secret_basic kullanan bir belirteç uç noktası isteğini gösterir:

POST /token HTTP/1.0
Host: api.aliyunidaas.com
Authorization: Basic YXBwX21pY2hzN3I0*******cHllOkNTKioqKioq

grant_type=authorization_code&
code=COE59pkCTm4J*******arGEaiShj7NCzLCYu9

İstemci gizli anahtarı döndürme

Bkz. Genel yapılandırmalar içindeki gizli anahtar döndürme bölümü.

Sonraki Adımlar

Temel OIDC entegrasyonunu tamamladıktan sonra şunları yapmak isteyebilirsiniz:

  • Oturum açma deneyimini özelleştirin — Genel yapılandırma içinde kimlik doğrulama yöntemlerini ve marka ayarlarını yapılandırın.

  • Uygulama kimlik bilgilerini yönetin — Genel yapılandırmalar içinde istemci gizli anahtarınızı döndürün veya güncelleyin.

Kaynaklar