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