分享方式:


簽發者服務通訊範例

Microsoft Entra 認證識別碼,透過由您組織的 OpenID 符合規範識別提供者,所產生的識別碼權杖中擷取宣告,並發出可驗認證。 本文指示您如何設定身分識別提供者,讓 Authenticator 可以與其通訊,擷取正確的識別碼權杖,並傳遞給發行服務。

若要發出可驗認證,請下載合約指示 Authenticator,以收集使用者輸入,並傳送該資訊至發行服務。 如果您需要使用識別碼權杖,就必須設定您的身分識別提供者,以允許 Authenticator 使用 OpenID Connect 通訊協定登入使用者。 結果識別碼權杖中的宣告會用來填入可驗認證之內容。 Authenticator 使用 OpenID Connect 授權碼流程,驗證使用者。 您的 OpenID 提供者必須支援下列 OpenID Connect 功能:

功能 描述
授與類型 必須支援授與程式碼類型。
語彙基元格式 必須產生未加密的精簡 JWT。
簽章演算法 必須產生使用 RS 256 簽署的 JWT。
設定文件 必須支援 OpenID Connect 設定檔與jwks_uri
用戶端登錄 必須支援使用redirect_uri數值的vcclient://openid/公用用戶端註冊。
PKCE 基於安全性考慮,建議使用,但非必要。

傳送給您身分識別提供者的 HTTP 要求範例如下述所列。 您的身分識別提供者必須根據 OpenID Connect 的驗證標準,接受並回應這些要求。

用戶端登錄

若要接收可驗認證,您的使用者必須從 Microsoft Authenticator 應用程式登入您的 IDP。

若要啟用此交換,請向您的身分識別提供者註冊應用程式。 如果您是使用 Microsoft Entra ID,可以在這裡找到指示。 註冊時,請使用下列數值。

設定
應用程式名稱 <Issuer Name> Verifiable Credential Service
重新導向 URI vcclient://openid/

向您的身分識別提供者註冊應用程式之後,請記錄其用戶端識別碼。 您會在接下來的章節中使用該識別碼。 您也需要將 URL 寫入至 OIDC 相容身分識別提供者的已知端點。 發行服務會使用此端點下載驗證識別碼權杖所需的公開金鑰,而該權杖會由 Authenticator 傳送。

Authenticator 使用設定的重新導向 URI,讓它知道登入何時完成,而且可擷取識別碼權杖。

授權要求

傳送給您身分識別提供者的授權要求會使用下列格式。

GET /authorize?client_id=<client-id>&redirect_uri=vcclient%3A%2F%2Fopenid%2F&response_mode=query&response_type=code&scope=openid&state=12345&nonce=12345 HTTP/1.1
Host: www.contoso.com
Connection: Keep-Alive
參數
client_id 在應用程式註冊過程中取得的用戶端識別碼。
redirect_uri 必須使用vcclient://openid/
response_mode 必須支援query
response_type 必須支援code
scope 必須支援openid
state 必須根據 OpenID Connect 標準傳回給用戶端。
nonce 必須根據 OpenID Connect 標準,以識別碼權杖中的宣告傳回。

當收到授權要求時,您的身分識別提供者應驗證使用者,並採取任何必要步驟來完成登入,例如多重要素驗證。

您可以自訂登入程式,符合您的需求。 您可以要求使用者提供其他資訊、接受服務條款、為認證付費等。 當完成所有步驟後,請重新導向至重新導向 URI,以回應授權要求,如下所示。

vcclient://openid/?code=nbafhjbh1ub1yhbj1h4jr1&state=12345
參數
code 由您的身分識別提供者所傳回的授權程式碼。
state 必須根據 OpenID Connect 標準傳回給用戶端。

權杖要求

傳送給您身分識別提供者的權杖要求,將會具有以下格式。

POST /token HTTP/1.1
Host: www.contoso.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 291

client_id=<client-id>&redirect_uri=vcclient%3A%2F%2Fopenid%2F&grant_type=authorization_code&code=nbafhjbh1ub1yhbj1h4jr1&scope=openid
參數
client_id 在應用程式註冊過程中取得的用戶端識別碼。
redirect_uri 必須使用vcclient://openid/
scope 必須支援openid
grant_type 必須支援authorization_code
code 由您的身分識別提供者所傳回的授權程式碼。

收到權杖要求時,您的身分識別提供者應以識別碼權杖回應。

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache

{
"id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjFlOWdkazcifQ.ewogImlzc
    yI6ICJodHRwOi8vc2VydmVyLmV4YW1wbGUuY29tIiwKICJzdWIiOiAiMjQ4Mjg5
    NzYxMDAxIiwKICJhdWQiOiAiczZCaGRSa3F0MyIsCiAibm9uY2UiOiAibi0wUzZ
    fV3pBMk1qIiwKICJleHAiOiAxMzExMjgxOTcwLAogImlhdCI6IDEzMTEyODA5Nz
    AKfQ.ggW8hZ1EuVLuxNuuIJKX_V8a_OMXzR0EHR9R6jgdqrOOF4daGU96Sr_P6q
    Jp6IcmD3HP99Obi1PRs-cwh3LO-p146waJ8IhehcwL7F09JdijmBqkvPeB2T9CJ
    NqeGpe-gccMg4vfKjkM8FcGvnzZUN4_KSP0aAp1tOJ1zZwgjxqGByKHiOtX7Tpd
    QyHE5lcMiKPXfEIQILVq0pc_E2DzL7emopWoaoZTF_m0_N0YzFC6g6EJbOEoRoS
    K5hoDalrcvRYLSrQAZZKflyuVCyixEoV9GfNQC3_osjzw2PAithfubEEBLuVVk4
    XUVrWOLrLl0nx7RkKU8NXNHq-rvKMzqg"
}

識別碼權杖必須使用 JWT 精簡序列化格式,且不得加密。 識別碼權杖應包含下列宣告。

索賠
kid 用來簽署識別碼權杖金鑰的金鑰識別碼,且可對應至 OpenID 提供者的 jwks_uri 輸入。
aud 在應用程式註冊過程中取得的用戶端識別碼。
iss 必須是 OpenID Connect 設定文件中的issuer數值。
exp 必須包含識別碼權杖的到期時間。
iat 必須包含發出識別碼權杖的時間。
nonce 授權要求中包含的數值。
其他宣告 識別碼權杖應包含任何額外的宣告,且在將要發出的可驗認證中也會包含其數值。 您應在此區段中包含任何與使用者相關的屬性,例如其名稱。

下一步