我想通过证书获取访问 token 。
我从我的应用程序中知道这些 client_id、grant_type、scope 的值。
但是我在哪里可以找到assertion和client_assertion的值。
我需要获得更多代币吗?我完全迷失了。
任何人都可以指导我使用工作示例吗?
最佳答案
这是一个示例。可以概括为:
- 转至此网址获取授权码:
https://login.microsoftonline.com/tenant_id/oauth2/v2.0/authorize? client_id=aad_client_id &response_type=code &redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F &response_mode=query &scope=api://aad_client_id_which_exposed_api/permission_name &state=12345
2.使用auth code通过auth code流程生成访问 token 。 3.使用访问 token 通过obo流程生成另一个访问 token 。
当一个API想要调用另一个API时,使用代表流。所以首先你需要有一个受AAD保护的web api,这样它才能接收一个访问 token A。有了这个 token A后,代表流可以通过A生成一个新的 token B,所以A是参数断言
。然后使用客户端 ID + 客户端密码
并遵循 this section通过obo流生成访问 token 。这就是我在屏幕截图中所做的。
Azure AD 还使用证书
而不是客户端 key
来完成授权。所以我们也可以关注this section去做吧。如您所见,缺少 client_secret
但出现 client_assertion_type client_assertion
。
那么剩下的问题就是如何获取token A了。就像我说的,token A是用来访问受AAD保护的API的,所以你需要暴露一个API并给予该api权限,然后更新你们的项目授权范围对吗?然后this tutorial展示整个进度。完成所有步骤后,您可能需要先使用您的 onmicrosoft.com
帐户登录,然后您可以从浏览器中的网址获取 code
,然后使用它生成访问 token 的代码,该 token 的范围应类似于 api://aad_client_id/xxx
,这是 token A。
您也可以引用this tutorial ,这可以帮助您了解obo流程。
关于azure - 如何在 on_behalf_of 流程中创建 client_assertion 和断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74311506/