根据this official Microsoft document(及其中引用的文档),使用login.microsoftonline.com/myTenant/..
的URI必须替换为myTenant.b2clogin.com/mytenantId/..
对于使用MSAL进行交互式登录以获取ID令牌,这对我来说效果很好。但是我无法弄清楚要与IConfidentialClientApplication
和机密一起使用的URI。我在C#Windows应用程序中使用MSAL 4.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: Unknown or invalid instance.
响应。
我想念什么?在这种情况下,我可以继续使用login.microsoftonline.com
吗?
答案 0 :(得分:1)
(此答案有些曲折,所以请仔细阅读直到结尾:))
通常不应继续将login.microsoftonline.com
用于B2C it will be retired on December 4, 2020。
权威应采用https://{your-tenant-name}.b2clogin.com/tfp/{your-tenant-ID}/{policyname}
或https://{your-tenant-name}.b2clogin.com/tfp/{your-tenant-name}.onmicrosoft.com/{policyname}
此外,在客户端设置代码中,您应该使用.WithB2CAuthority
而不是.WithAuthority
来进行B2C的使用(但是由于 Client Credential Grant ,所以这里有一个问题)在答案的后面)。
Example code(尽管该示例使用public client, in your case it's confidential client,只是引用它作为权威参考)。
有关详细信息,请参见this。
但是,由于您正在使用带有客户端ID和密码的客户端凭据授予流,因此here中没有直接在B2C中提供支持。
尽管OAuth 2.0客户端凭据授予流当前不是 由Azure AD B2C身份验证服务直接支持,您可以 使用Azure AD和Microsoft设置客户端凭据流 Azure AD中应用程序的身份平台/令牌终结点 B2C租户。 Azure AD B2C租户与 Azure AD企业租户。
总而言之,您不能将B2C直接用于客户证书授予,并且解决方法要求使用B2C的常规通用企业AAD后端。因此b2clogin.com
部分不适用于此替代方法。这意味着仅对于这种特殊的 Client Credential Flow 案例,您应该继续使用login.microsoftonline.com
,因为您实际上并没有真正使用B2C。