C# 在通过客户端凭据授予流获取令牌时使用b2clogin.com
根据(以及此处引用的文档),使用C# 在通过客户端凭据授予流获取令牌时使用b2clogin.com,c#,azure-ad-b2c,msal,C#,Azure Ad B2c,Msal,根据(以及此处引用的文档),使用login.microsoftonline.com/myTenant/。的URI必须替换为myTenant.b2clogin.com/mytenantId/。 对于使用MSAL进行交互式登录以获取ID令牌,这对我来说很好。但我无法确定要使用哪个URI与IConfidentialClientApplication并使用一个秘密。我正在C#Windows应用程序中使用MSAL4.18 使用login.microsoftonline.com,以下代码可以正常工作 ICo
login.microsoftonline.com/myTenant/。
的URI必须替换为myTenant.b2clogin.com/mytenantId/。
对于使用MSAL进行交互式登录以获取ID令牌,这对我来说很好。但我无法确定要使用哪个URI与IConfidentialClientApplication
并使用一个秘密。我正在C#Windows应用程序中使用MSAL4.18
使用login.microsoftonline.com
,以下代码可以正常工作
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder
.Create(clientId)
// how must this URL look like when using b2clogin.com
.WithAuthority("https://login.microsoftonline.com/*MyTenant*.onmicrosoft.com/v2.0")
.WithClientSecret(secret)
.Build();
AuthenticationResult authenticationResult = await app
.AcquireTokenForClient(scopeArray)
.ExecuteAsync();
无论我使用什么b2clogin.com
URI(例如https://*myTenant*.b2clogin.com/*myTenantId*/v2.0
),我都会返回一个AADSTS50049:未知或无效实例。
响应
我错过了什么?我可以继续使用login.microsoftonline.com
来处理这个问题吗?(这个答案有点曲折,所以请一直读到最后:)
您通常不应继续使用B2C的login.microsoftonline.com
权限的格式应为https://{your tenant name}.b2clogin.com/tfp/{your tenant ID}/{policyname}
或https://{your tenant name}.b2clogin.com/tfp/{your tenant name}.onmicrosoft.com/{policyname}
此外,您应该在客户机设置代码中使用B2C的
.WithB2CAuthority
,而不是.WithAuthority
(但这里有一个问题,因为答案后面部分是客户凭证授予)
(尽管示例中使用了,但仅将其引用为权威参考)
有关详细信息,请参阅
但是,由于您使用的是使用客户机id和密码的客户机凭据授予流,所以B2C中不直接支持它
虽然OAuth 2.0客户端凭据授予流当前不可用
由Azure AD B2C认证服务直接支持,您可以
使用Azure AD和Microsoft设置客户端凭据流
Azure AD中应用程序的标识平台/令牌终结点
B2C租户。Azure AD B2C租户与共享某些功能
Azure AD企业租户
总之,您不能直接使用B2C进行客户端凭据授予,解决方案需要使用B2C的常规通用企业AAD后端。因此,
b2clogin.com
部分将不适用于此解决方案。这意味着只有在这种特定的客户端凭据流情况下,您才应该继续使用login.microsoftonline.com
,因为您实际上并不是在真正意义上使用B2C来实现这一点。这种权限格式不适用于secretentialClientApplication
和WithClientSecret()
。它返回的B2C“authority”Uri在路径中至少应有3个段(即。https:///tfp///...)您应该在客户机设置代码中使用B2C的。with B2CAutory
,而不是。with authority
。答案中添加了。使用。WithB2Cautory
失败,原因是AADB2C90086:不支持提供的授权类型[客户端凭据]。
确定您使用的是客户端凭据流
。B2C中不直接支持它本身!有文件证明b2clogin.com适用于B2C中的用户交互登录。因为你的不是你不需要的。更新的答案更清晰。