簽發者服務通訊範例
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 |
授權要求中包含的數值。 |
其他宣告 | 識別碼權杖應包含任何額外的宣告,且在將要發出的可驗認證中也會包含其數值。 您應在此區段中包含任何與使用者相關的屬性,例如其名稱。 |