这是我第一次在任何项目中使用Azure AD B2C作为用户身份验证后端。我是这些概念的新手,正在努力加深对这些概念的理解。
我正在使用Azure AD B2C服务。我正在开发一套最终将全部使用B2C作为用户身份验证引擎的应用程序。例如,我有一台ASP.NET Core API服务器,它将我的后端SQL数据公开给最终用户。我有一个JavaScript React应用程序,该应用程序使用B2C隐式工作流程进行身份验证并从中获取令牌。最后,我有一个使用resource owner password credentials flow获取我的B2C令牌的C#桌面应用程序。
因此,如您所见,我有几种不同类型的B2C应用程序。我有一个可以利用隐式交互式工作流的Web应用程序。我有一个桌面应用程序,可以利用ROPC工作流程来获取令牌。我有需要验证令牌的Web服务器。
我对我的后端API服务器及其对用户提供的B2C承载令牌的验证感到困惑。
据我了解,我需要配置我的API服务器,以便它需要特定的策略(作为权限)来颁发令牌。这很简单-我目前希望它具有交互式,默认的B2C提供的登录策略。
我的Web应用程序(基于浏览器的React应用程序)可以简单地使用相同的登录策略用户流,并向API服务器提供访问令牌,并且一切正常,因为两者都使用与发布者/授权机构相同的策略。
我的GUI应用程序虽然没有使用相同的登录策略,但却使用了ROPC策略,该策略未能通过API服务器的权限检查,因为服务器希望登录策略已授予令牌。
我的问题是...
如何协调所有这些政策?我是否正确地认为我的各种“客户端应用程序”应该可以通过对他们有意义的任何策略(用户流)自由生成令牌?但是,由于我的API服务器需要使用一个策略,因此应该将哪个策略用作权限?
答案 0 :(得分:1)
@Ryan,您的ASP.NET Core 2.1 Web API可以决定如何通过使用TokenValidationParameters来验证令牌。例如,我尚未检查特定于B2C的案例,但我怀疑差异将来自发行人。
此示例显示了如何覆盖发行者的默认验证:在Startup.cs line 61中的active-directory-aspnetcore-webapp-openidconnect-v2,分支aspnetcore2-2-signInAndCallGraph
options.TokenValidationParameters.IssuerValidator = AadIssuerValidator.ValidateAadIssuer;
,然后可以在AadIssuerValidator.cs
中找到AadIssuerValidator.ValidateAadIssuer方法。只要令牌来自Azure AD(v1.0或v2.0终结点),此组织就可以接受任何AAD组织。我认为您可以接受主机(something.b2clogin.com吗?)来适应B2C情况?
您还将在Microsoft的TokenValidation文章中找到更多信息。.NETWiki的身份扩展名
答案 1 :(得分:1)
同一租户中的所有保单的发行人URL应该相同。
https://{tenant-name}.b2clogin.com/{tenant-id}/v2.0/
示例:
https://fabrikamb2c.b2clogin.com/775527ff-9a37-4307-8b3d-cc311f58d925/v2.0/
这意味着您可以使用API服务器配置任何权限,并且它应该验证为任何策略发出的令牌。