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中的用户交互登录。因为你的不是你不需要的。更新的答案更清晰。