gpt4 book ai didi

azure-active-directory - 在使用客户端证书的 AcquireTokenAsync 调用期间会发生什么?

转载 作者:行者123 更新时间:2023-12-04 00:37:27 24 4
gpt4 key购买 nike

在 Azure AD 中,当我们进行诸如 AuthenticationContext.AcquireTokenAsync(resource, new ClientAssertionCertificate(_clientId, _cert)) 之类的调用时,不清楚究竟会发生什么。

如果有的话,证书的哪一部分会被交换?

是否有挑战/回应发生?

客户端是否需要私钥作为其中的一部分?

最佳答案

您可以通过两种方式找到问题的答案。一种方法是查看 Microsoft Active Directory Authentication Library (ADAL) for .NET source code on GitHub ,因为这是开源的。另一个(我们将在此处执行)是查看 AcquireTokenAsync(String, ClientAssertion) 生成的网络请求,然后从那里向后工作。

使用 Fiddler (或任何其他流量分析器),我们可以看到如下内容(为便于阅读而格式化):

POST https://login.microsoftonline.com/{tenant-id}/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&resource=https%3A%2F%2Fgraph.windows.net
&client_id={app-id}
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1N...VE8wHSf-HZvGQ

分解:

  • grant_type=client_credentials 告诉我们这是使用 OAuth 2.0 Client Credentials Grant 的 token 请求。流。
  • resource=https%3A%2F%2Fgraph.windows.net 提供客户端请求访问 token 的资源的 URI。在本例中,它用于 Azure AD Graph API。
  • client_id={app-id}client identifier .在 Azure AD 中,这是已注册应用程序的应用 ID。
  • client_assertion_typeclient_assertion 的存在表明客户端正在使用 assertion进行身份验证:
  • client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer 表示正在使用的客户端断言是签名的 JSON Web Token (智威汤逊)。
  • client_assertion=eyJhbGciOiJSUzI1N...VE8wHSf-HZvGQ 是上述签名的 JWT token 。授权服务器(例如 Azure AD)将验证内容,并检查 token 是否确实由为相关客户端授权的证书签名。

那么,ADAL 所做的是:

  1. 使用一组关于客户端(您的应用)的声明构造一个 token
  2. 使用您证书的私钥生成这些声明的加密签名
  3. 将其捆绑到签名的 JWT 中
  4. 向权威机构发出适当格式的 token 请求

AcquireTokenAsync 期间,仅提供证书的指纹(它包含在 JWT header 中以帮助授权服务器查找相应的公钥)。 JWT 的签名是证明客户端拥有私钥的证明。但是,之前 AcquireTokenAsync(String, ClientAssertion) 可以成功使用,客户端所有者(即您)需要向 Azure AD 提供证书的公钥。

这里没有发生任何挑战/响应。 token 是在单个请求中获得的,由客户端发起。

有关更多详细信息,您可以查看这一切实现的标准:

(注意 ADAL 有一个缓存。只有当 ADAL 在 token 缓存中找不到有效的访问 token 时,我上面描述的一切才会发生。您可以使用 AuthenticationContext.TokenCache.Clear()清除缓存以进行实验。)

关于azure-active-directory - 在使用客户端证书的 AcquireTokenAsync 调用期间会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39354835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com