- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个正在运行的 ASP.NET Core 网站,该网站使用 ASP.NET Identity 个人用户身份验证,并具有用户和角色的 ASP.NET Identity 表。
现在有些用户希望使用 Windows 身份验证而不是用户名/密码。
我可以部署网站的副本,只需调整 web.config 并更改 aspNetCore 标记属性
forwardWindowsAuthToken="false"
到
forwardWindowsAuthToken="true"
我想对现有个人用户帐户网站和 Windows 身份验证网站使用相同的代码库。
这意味着我将在 IIS 中拥有两个网站。我在 web.config 中使用 forwardWindowsAuthToken="false"
(个人用户帐户)部署一个另一个是 forwardWindowsAuthToken="true"
(Windows 身份验证)
我有一个属性可以扩展 ASP.NET Identity 个人用户帐户
public class ApplicationUser : IdentityUser
{
[StringLength(50)]
public string DomainUserName { get; set; }
}
然后我在数据库中添加表上的唯一约束
CREATE UNIQUE NONCLUSTERED INDEX AspNetUsers_DomainUserName_Constraint
ON [AspNetUsers](DomainUserName)
WHERE DomainUserName IS NOT NULL;
对于 Windows 身份验证站点,我需要以某种方式从个人用户帐户身份表加载 ClaimsPrincipal 用户,或者能够覆盖个人 ClaimsPrincipal 用户方法和函数以在现有 ASP.Identity 表中查找角色,而不是使用域组作为角色。
我可以使用 User.Identity.Name
它为我提供了我的域名,然后使用它通过 Entity Framework Code First 查询我的 aspnetusers 表以获取任何用户信息
我需要现有的 Controller 方法属性,例如 [Authorize(Roles = "Admin")]
方法,以便使用数据库中的 AspNetRoles 组而不是域组在两个站点中继续以相同的方式工作作为角色。
如何覆盖 [Authorize(Roles = "Admin")]
Controller 方法属性来查询数据库,或者将 Controller ClaimsPrincipal Windows User 替换为我通过查询 aspnetusers 获得的自己的用户 table 。
或者以某种方式替换 Windows 部署站点的中间件。
我当前的 Startup.cs
services.AddIdentity<ApplicationUser, ApplicationRole>(options =>{})
.AddEntityFrameworkStores<MyDbContext, Guid>()
.AddDefaultTokenProviders();
最佳答案
我有同样的要求,从我的角度来看,不可能正确混合 Windows 身份验证和个人帐户。
启用 Windows 身份验证时,角色必须由 Windows/AD 组管理。您可以实现 IClaimsTransformation 接口(interface),该接口(interface)允许从 HTTP 请求拦截身份用户并将其添加到从数据库获取的角色,但这会在我的情况下创建 AD 检测到的安全漏洞。我必须使用角色以外的特定声明来解决这个问题,因此我的授权属性检查策略基于声明而不是角色。
从我的角度来看,管理 Windows 身份验证和个人帐户身份验证的最佳方法是拥有 2 个身份验证服务,一个用于 Windows,另一个用于个人帐户,每个身份验证服务都会生成一个资源接受的 token (例如 JWT)服务。
现在,为了回答您的问题,实现接口(interface) IClaimsTransformation 并将其添加到startup.cs文件中:
services.AddSingleton<IClaimsTransformation, MyConcreateClaimsTransformer>();
您可以从 IClaimsTransformation 类获取 ClaimPrincipal 并添加从数据库检索到的声明。
关于asp.net-core - 如何覆盖默认的 Windows Authentiation ClaimsPrincipal User 和 Authorize Controller 方法属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41157571/
我在更改 dotnetcore 身份中的角色时遇到了一些问题。 我有以下代码。 private async Task SetRoleToX(ClaimsPrincipal claimsPrincipa
我看到很多像下面这样的代码来创建一个新的 ClaimsIdentity 和 ClaimsPrincipal var claims = new List() { new Claim(ClaimTypes
我们将 IdentityServer4 用于 IdentityServer,将 IdentityServer3 用于客户端 (ASP.NET MVC 5)。 一切正常(用户/Claimsprincip
我将 Adal 与 Azure Active Directory 结合使用,我需要通过自定义 OwinMiddleware 添加额外声明。当我向该委托(delegate)人添加声明时,我可以在当前请求
我正在尝试对从 ClaimsPrincipal.Current 获取信息的 Controller 代码进行单元测试。在 Controller 代码中我 public class HomeControl
我正在制作一个开发人员工具,用于模拟内联网站点的角色,以允许开发人员根据需要快速充当任何角色。定义的角色是 Developer、Team Lead、Team Member、Engineering、Ma
我正在对我的 Controller 方法对来自 ClaimsPrincipal 对象的信息进行单元测试,但是 Current.FindFirst() 没有返回任何内容,有人可以帮忙吗?谢谢。 (也可以
我正在使用 Azure AD 身份验证的 Azure 函数。在 Azure 上部署时一切正常。 public static async Task ExportT( [HttpT
在 ASP.NET Core Controller 中,我可以访问 User获取所有当前用户声明为 ClaimsPrincipal .现在我使用 userManager.CreateAsync 添加了
如果我直接进入它,我已经构建了一个 RESTful 服务 (WebAPI V2) 和 basic authentication...按预期工作,但我非常不确定如何从 ClaimsPrincipal 检
我正在使用 Azure 事件目录身份验证来提取用户信息。 我可以使用 ClaimsPrincipal.Current 获取用户详细信息。是否有任何选项可以使用此获取 Reporting Manage
我有一个在 ASP.Net MVC 中构建的 HR Web 应用程序,分为多个区域,例如经理、员工。这些区域代表系统中能够执行不同任务的不同类型的用户。涉及遗留数据库,每种用户类型的信息存储在不同的表
我目前正在使用以下方法实现联合身份验证解决方案:用于颁发 token 的被动 STS、托管 Silverlight 应用程序的网站和 Silverlight 应用程序的 WCF 服务。 到目前为止,我
我有一个在 Azure 上作为服务发布的 webapi。它使用集成的 AD 安全性。 在我的 Controller 中,我可以通过 User 属性访问 ClaimsPrincipal。 ClaimsP
我有一个具有多个部门级别的应用程序。用户是代表部门的 AD 组的成员。然后,该组是代表上级部门的另一个组的成员,依此类推,通过多个级别。 我需要知道整个传递组成员资格链,但我还需要知道用户是哪个组的直
我有一个具有多个部门级别的应用程序。用户是代表部门的 AD 组的成员。然后,该组是代表上级部门的另一个组的成员,依此类推,通过多个级别。 我需要知道整个传递组成员资格链,但我还需要知道用户是哪个组的直
我有一个 Office 365 帐户(使用最新的 SharePoint 2013 实例) 我还有一个针对 Office 365 进行身份验证的简单 .net Web 应用程序,我创建了一个 AppPr
我创建了一个自定义主体类 public class FacebookPrincipal : ClaimsPrincipal { public JObject Data { get; set;
我有一个 Nancy 模块和一个装饰器类,它们需要知道 ClaimsPrincipal 才能检索用户的电子邮件地址。所以我将构造函数声明为 public EmailDecorator(IDbConne
我遇到了有关为结合了 MVVM 的 Razor 页面编写单元测试的问题。我想测试 Razor 中的 OnPostAsync() 方法,但是此方法将调用另外两个需要 ClaimsPrincipal 用户
我是一名优秀的程序员,十分优秀!