全部產品
Search
文件中心

Identity as a Service:賬戶同步接入概述

更新時間:Apr 16, 2025

本文概述了阿里雲應用身份服務(EIAM)的開發參考,涵蓋核心功能、使用情境及接入指南,協助開發人員快速整合統一身份管理與單點登入能力。

背景介紹

IDaaS支援自研應用對接,實現IDaaS到應用的組織/賬戶同步。若希望實現應用到IDaaS的賬戶同步,請參考應用開發API說明

應用同步配置請參考:賬戶同步-IDaaS同步到應用。本篇文檔介紹應用按照IDaaS規範完成賬戶同步對接。

  • 一致性依賴:可能有一系列相關方,依賴於您的應用中的身份資料,進行營銷或驗證,由此希望能夠及時地從IDaaS同步賬戶的變化。例如在使用者入職時,在IDaaS中建立賬戶,HR應用需要近乎同時建立賬戶,才不會耽擱入職流程。可以通過訂閱賬戶建立事件實現。

  • 即時性要求:您的應用需要及時響應使用者的操作。例如使用者登入系統後修改了手機後,你的應用需要及時更新該使用者的手機號,可以通過訂閱賬戶更新事件實現。

事件回調機制說明

以上是兩個簡單的使用情境,開發人員可以根據不同需求,訂閱不同的事件,進行不同的處理。

為了滿足客戶的快速對接需求,我們提供了一套由IDaaS定義的、整合便捷、傳輸安全的IDaaS到應用同步方式,應用可以快速對接,接收同步請求。

這套機制通過事件回調機制實現。

在IDaaS中,您需要配置關注的事件(例如賬戶建立),當對應事件觸發後,將自動向事件訂閱者通過HTTP POST發送同步請求。

事件分為兩個部分:

  • 訂閱事件:在IDaaS管理主控台完成,配置關注的IDaaS事件。

  • 接收事件:需要開發人員按照要求,進行對接。

訂閱事件

在IDaaS中建立應用後,可以前往賬戶同步菜單,進行應用賬戶同步配置。

具體配置方式,請參考IDaaS同步到應用-SCIM

在下方配置中,您可以勾選當前應用關注的回調事件。

當事件發生時,IDaaS將嚮應用發出請求。

接收回調

當事件發生時,IDaaS會向配置的同步接收地址發送POST請求。

請求參數參考如下:

Content-Type: application/json;charset=utf-8

//IDaaS post 請求body體樣本。應用拿到參數後進行驗簽
{
 "event":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}

所有參數均在event欄位中傳遞,傳遞的內容是包含簽名的JWT格式(參考 RFC 7515 JWS),

事件格式

您需要使用各語言的通用開源工具,對JWT資訊進行解析。

出於測試目的,您也可以將JWT格式值粘貼到https://jwt.io/,以直接查看其包含內容。

event 值包含兩大部分,headerpayload.

header 舉例:

{
    "kid": "KEYH1zR7XLCGcHw1hzhkCqVjnuyaAJUf6yMR",
    "typ": "JWT",
    "alg": "RS256"
}

payload 舉例:

{
  "iss":"urn:alibaba:idaas:app:event", 
  "sub":"idaas-121313", 
  "aud":"app_12131313",
  "exp":1640966400, 
  "iat":1640966400, 
  "jti": "cNetm9OD5bXqfVfdvqGMYw",
  "dataEncrypted":false,
  "cipherData":"",    
  "plainData":{
    "aliUid":1231313,  //阿里雲帳號Uid
    "instanceId":"執行個體ID",  //執行個體id
    "eventVersion":"V1.0",  //版本號碼
    "eventData":[
      {
        "eventId":"",     //事件id
        "eventType":"",   //事件類型
        "eventTime":121313,  //事件實際發生的時間
        "bizId":"業務資料id",  //業務資料id。若是組織,則為組織id
        "bizData":{}       //具體的資料詳情,不同事件類型該欄位不同。可參考通訊錄事件
      }
    ]   
  }
}

其中包含的欄位具體如下:

參數名稱

參數位置

參數類型

參數說明

header

alg

header

String

固定值:RS256

代表採用SHA-256的RSA簽名

kid

header

String

IDaaS頒發的公私密金鑰對key ID。

驗簽時需要使用該kid應的公開金鑰。

IDaaS暫不支援同步用公私密金鑰輪轉,同步公私密金鑰資訊不會變化。

payload

iss

payload

String

固定值:urn:alibaba:idaas:app:event

代表是由IDaaS發起的事件訂閱通知。

sub

payload

String

客戶的IDaaS執行個體ID

aud

payload

String

客戶的IDaaS應用ID

exp

payload

Long

event的到期時間,單位/ms,預設為建立時間之後30分鐘。

若目前時間超過到期時間,應用解析時應該報錯,判斷到期。

iat

payload

Long

event的建立時間,單位/ms。若目前時間早於建立時間,應用解析時應該報錯,判斷無效。

data_encrypted

payload

Boolean

事件數目據是否為加密傳輸。

cipher_data

payload

String

開啟加密時不為空白。該欄位是加密後密文事件數目據,需解密後查看內容。

plain_data

payload

Object

關閉加密時不為空白。包含所有事件數目據。

資料驗簽

請先對JWT驗簽,確認對應event事件資訊是由IDaaS簽發。若不進行驗證,任何人都將可以仿造請求。

您可以通過同步菜單中的驗證公開金鑰斷點,擷取到驗簽JWT使用的公開金鑰資訊,並使用其對發送給應用的事件內容進行有效來源驗證。我們推薦您使用對應開發語言的開源JWT工具包進行驗簽工作。

資料解密(可選)

IDaaS支援對推送的事件數目據進行加密傳輸,加密後欄位將在payloadcipher_data欄位傳遞。

{
    ...
    "cipher_data": "ZePq7ckODWnL54vqZc3kTw0vF7tjvIRZjqqy/gZm9oTEt71WMufD9swlmHzZkniSqyDGQpkmMRLCXz9gzRJ4BY2RroLUPQW8ZDPSfmJKEf2m2w6wY1twoRlnHLoFCVhravsvN0afBqmxd3eK5tHd05Ze6MLOXS3fqxqH61dGAm2mwecvAFPRrKVeg6JXBYUvA2Uu6dmCOP3y938kFdhodD13O05MBIqWghq569wYvVjKMFMcnsZqmGGKXN0vRFhg+SR16sr24b1X/gQDbNqyMDICB9k3QMe09dOodwNEwvgxbf1v4PbyCRX1P9UO74nDQaWROWZFplE7qP/JMy3pBr0pxW+hJS9u/Zpvj/hvLlhBTAZkmhAKDKxlrYztqrgJbr4VOUv8mlqxWjDK4I7VZugODJMSwi1HdjXL+wlMzPMOeH8rkDFU+b5VH3dsxg3hZ64Ukd7exB62QyyeIJpfk0d57xw8UACiSsXadexQYpJPDycVdmJ7FAmIhxbJ8I6w9Kcv9U5sKybUz1YA8tONAw=="
    ...
}

開啟該特性後,您可以自主填寫加密金鑰,也可由IDaaS產生密鑰。IDaaS發出事件回調請求前,會使用該密鑰將請求資料全部加密後傳輸。

IDaaS會使用AES-256演算法對稱式加密,並採用JWE格式對事件進行加密。

應用需要使用同樣的密鑰解密,才能擷取同步資料。

開發對接可以參考 Java 應用接入賬戶同步樣本

響應返回

應用需負責按照IDaaS規範,返回事件處理結果。IDaaS將記錄結果,並依照返回資訊進行後續處理。

執行成功

若請求處理一切正常,必須返回eventId及對應的結果,格式如下:

返回欄位

資料類型

描述

successEvents

Array

同步成功,返回該事件

skippedEvents

Array

同步跳過(情境舉例:應用接收到刪除賬戶事件,但賬戶在應用系統中已不存在,則可以返回跳過。)

failedEvents

Array

同步失敗,返回該事件

retriedEvents

Array

同步重試,若返回,該事件將重試。最大重試次數5次

-eventId

String

事件ID,必須返回IDaaS當次事件ID。

不發送或傳輸錯誤eventId將觸發重試。

-eventCode

String

錯誤碼,IDaaS將記錄結果,便於排查問題。您可自訂eventcode

-eventMessage

String

錯誤描述,IDaaS將記錄結果原因,便於排查問題。您可自訂eventmessage

正常返回結果樣本:

{
    "successEvents": [
        {
            "eventId": "事件ID",
            "eventCode": "SUCCESS",
            "eventMessage": "SUCCESS"
        }
    ],
    "skippedEvents": [
        {
            "eventId": "事件ID",
            "eventCode": "跳過code",
            "eventMessage": "跳過描述"
        }
    ],
    "failedEvents": [
        {
            "eventId": "事件ID",
            "eventCode": "錯誤code",
            "eventMessage": "錯誤描述"
        }
    ],
    "retriedEvents": [
        {
            "eventId": "事件ID",
            "eventCode": "錯誤code",
            "eventMessage": "錯誤描述"
        }
    ]
}
重要

收到請求後,需要在10秒內以HTTP 200狀態代碼響應該請求,否則IDaaS會視此次推送失敗並以1s、5s、10s、10s、10s的間隔重新推送事件,最多重試5次。

執行失敗

若處理失敗,返回HTTP狀態代碼必須是4XX或者5XX。

處理失敗後返回的參數如下:

參數名稱

資料類型

描述

error

String

錯誤碼

error_description

String

錯誤描述

針對通用,建議參考如下錯誤碼返回:

錯誤碼

HTTP狀態代碼

描述

invalid_token

403

jws token校正不合法

too_many_request

429

業務方處理繁忙返回該錯誤後,idaas會進行流控策略進行降級處理

internal_error

500

內部錯誤,idaas會自動重試

異常返回結果樣本

{
     "error": "invalid_token",
     "error_description": "jws token校正不合法"
}