我在 Azure 上有一个应用程序注册,用于使用 ROPC 流对请求进行身份验证,以便我们可以模仿真实的用户访问 token 并测试我们的 API。这是有效的,但为了使其更安全,我们希望能够在请求中指定一个 secret 。
这不是 ROPC 的默认设置,因为它不打算与 secret 一起使用(注意 - 我们不能在我们正在进行的这部分测试中使用客户端凭据)。
应用程序注册与 B2C 用户流程设置一起使用。我不认为这与这个问题太相关,但我可能是错的。
目前工作电话如下 -
在 Azure 上要允许 ROPC 流,您需要将应用程序设置为允许公共(public)流。
我相信此设置会阻止请求中需要任何形式的客户端 key 或证书。
微软文档似乎建议可以向 ROPC 调用添加 secret 并使它们成为必需的,但在将上述“公共(public)”azure 设置设置为 true 时,我无法找到实现此目的的方法。关闭后,您会收到一条错误消息,指出资源所有者流由于是私有(private)的而不允许。
这是 Microsoft 文档的一部分 - https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth-ropc这似乎表明您可以将应用程序设为私有(private),我只是不知道如何在允许流程的情况下实现。
最佳答案
这个link您提到的是关于Azure AD,而不是Azure AD B2C。因此有两种方法可以获取不同格式的访问 token 。另外,您使用authorization code flow更加安全。在 Azure Active Directory B2C 中。
<小时/>其中一个正在关注AAD Docs对于您的 AAD B2C 目录,请参阅 explanation 。注:scope
不支持application-id,与API Permissions中的权限有关。
POST https://login.microsoftonline.com/{b2c-tenant-name}.onmicrosoft.com/oauth2/v2.0/token
client_id={b2c-application-id}
&scope=openid offline_access
&username={username}
&password={password}
&grant_type=password
&client_secret={client_secret, if your app is not a public client}
<小时/>
[推荐]另一个是testing ROPC flow在 Azure AD B2C 中。 client_secret
不在参数中,所以无论是否公开都不需要。
https://{b2c-tenant-name}.b2clogin.com/{b2c-tenant-name}.onmicrosoft.com/{B2C_1_ROPC_Auth, name of ROPC flow}/oauth2/v2.0/token
username={username}
&password={password}
&grant_type=password
&scope=openid offline_access {b2c-application-id}
&client_id={b2c-application-id}
&response_type=token id_token
关于azure - 如何向 Azure 上基于 "Resource Owner Password Credentials"B2C 的应用程序注册添加 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66258839/