簽發者服務通訊範例
Microsoft Entra 驗證識別碼服務可以從您組織的 OpenID 相容識別提供者所產生的識別碼權杖擷取宣告,以發出可驗證的認證。 本文會指示您如何設定識別提供者,讓 Authenticator 能夠與其通訊,並擷取正確的識別碼權杖以傳遞至發行服務。
若要發出可驗證認證,Authenticator 會透過下載合約來收集使用者的輸入,並將該資訊傳送至發行服務來指示。 如果您需要使用識別碼權杖,您必須設定識別提供者,以允許 Authenticator 使用 OpenID 連線通訊協定登入使用者。 產生的識別碼權杖中的宣告可用來填入可驗證認證的內容。 驗證器會使用 OpenID 連線授權碼流程來驗證使用者。 您的 OpenID 提供者必須支援下列 OpenID 連線 功能:
功能 | 描述 |
---|---|
授與類型 | 必須支援授權碼授與類型。 |
語彙基元格式 | 必須產生未加密的壓縮 JWT。 |
簽章演算法 | 必須產生使用 RS 256 簽署的 JWT。 |
設定檔 | 必須支援 OpenID 連線組態檔和 jwks_uri 。 |
用戶端註冊 | 必須使用 的值 vcclient://openid/ 支援公用用戶端註冊 redirect_uri 。 |
PKCE | 基於安全性考慮,但並非必要,建議使用。 |
以下包含傳送至識別提供者的 HTTP 要求範例。 您的識別提供者必須根據 OpenID 連線驗證標準接受並回應這些要求。
用戶端註冊
若要接收可驗證的認證,您的使用者必須從 Microsoft Authenticator 應用程式登入您的 IDP。
若要啟用此交換,請向識別提供者註冊應用程式。 如果您使用 Microsoft Entra ID,您可以在這裡 找到指示 。 註冊時請使用下列值。
設定 | 值 |
---|---|
應用程式名稱 | <Issuer Name> Verifiable Credential Service |
重新導向 URI | vcclient://openid/ |
向識別提供者註冊應用程式之後,請記錄其用戶端識別碼。 您會在後續的 區段中使用它。 您也需要將 URL 寫到 OIDC 相容識別提供者的已知端點。 發行服務會使用此端點下載驗證驗證器傳送識別碼權杖所需的公開金鑰。
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 連線 標準傳回用戶端。 |
nonce |
必須根據 OpenID 連線 標準,以識別碼權杖中的宣告傳回。 |
當它收到授權要求時,您的識別提供者應該驗證使用者,並採取任何必要步驟來完成登入,例如多重要素驗證。
您可以自訂登入程式以符合您的需求。 您可以要求使用者提供其他資訊、接受服務條款、支付其認證等等。 完成所有步驟之後,請重新導向至重新導向 URI 以回應授權要求,如下所示。
vcclient://openid/?code=nbafhjbh1ub1yhbj1h4jr1&state=12345
參數 | 值 |
---|---|
code |
識別提供者傳回的授權碼。 |
state |
必須根據 OpenID 連線 標準傳回用戶端。 |
權杖要求
傳送至識別提供者的權杖要求會具有下列格式。
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 |
必須是 issuer OpenID 連線組態檔中的值。 |
exp |
必須包含識別碼權杖的到期時間。 |
iat |
必須包含發出識別碼權杖的時間。 |
nonce |
授權要求中包含的值。 |
其他宣告 | 識別碼權杖應該包含任何其他宣告,其值將包含在將要發行的可驗證認證中。 本節是您應該包含使用者的任何屬性,例如其名稱。 |