AAD-B2C与自定义角色存储的ASP.Net核心标识组合

时间:2018-08-07 10:09:12

标签: c# asp.net asp.net-core azure-ad-b2c asp.net-core-identity

我正在开发一个以AAD-B2C作为登录提供程序的ASP.Net Core Web应用程序。因此,用户必须先登录才能访问站点-> 身份验证

然后,我要评估用户实际上被允许访问的内容-> 授权

我有一个要求,即必须使用RBAC,并且不能在任何类型的AD中处理角色,而要在我们自己的数据库中处理该角色,而该数据库又位于REST API的后面。因此,我进行了Microsoft.AspNetCore.Identity.IUserRoleStore<MyUser>的自定义实现,以从REST API中检索用户和角色,并将其注册到Startup.ConfigureServices

services.AddIdentity<MyUser, MyRole>();
services.AddTransient<IUserStore<MyUser>, MyUserStore>();
services.AddTransient<IUserRoleStore<MyUser>, MyUserStore>();

但是现在默认身份验证似乎不再起作用(因为MyUser与ASP.Net默认User完全不同,例如MyUser没有User.Identity.IsAuthenticated )。另外,当我添加诸如MyUserStore.IsInRoleAsync之类的Razor指令时,我看不到该站点曾经调用User.IsInRole("Admin")

我想念什么吗?是否无法同时“拆分” ASP.Net Core Identity以一种方式处理身份验证(AAD-B2C)和另一种方式进行授权(自定义商店)?还是我打错电话了?

1 个答案:

答案 0 :(得分:0)

如果使用的是Azure AD B2C,则需要在Azure AD中定义自定义角色,并且我相当确定不支持您所描述的情况。 B2C在发送到应用程序的令牌中不包含组声明,但是在此建议一些解决方法。 Azure AD B2C - Role management