- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
几天来我一直在寻找这个问题的答案,但我没有找到任何成功。我会发布链接,但它可能会占用整个页面。
所以这就是我所拥有的......
我有一个 MVC 应用程序,它使用 WC-Federation 协议(protocol)。我已经能够配置应用程序,以便它对用户进行身份验证,并从 ADFS 返回声明。这很完美。我还可以毫无问题地提取所有 claim 。但我是在 Controller 中的一项操作中执行此操作的。
这就是我想要做的......
我想使用 ADFS 对用户进行身份验证,但我想使用自己的内部角色来授权用户访问特定 Controller (例如 [Authorize(Roles = "CoolRole")]
)。我希望能够做到这一点,因为我已经有一个使用 OAuth 2.0 的 Web API,以及一个用于管理用户和角色(内部和外部用户)的后端 SQL Server 数据库。我现在想要一个允许内部用户的安全门户通过单点登录体验访问数据。看着Controller
模型,我注意到有一些与身份验证过程相关的属性( OnAuthentication
, OnAuthenticationChallenge
)和一个与授权过程相关的属性( OnAuthorization
。)
我不一定需要代码,但我觉得我已经成功了,我需要指出正确的方向。
更新
我试过这个:
protected override void OnAuthorization(
System.Web.Mvc.AuthorizationContext filterContext)
{
//Private class to create a new IPrincipal based on my AppUserMgr
var user = _setCurrentUser(
(ClaimsIdentity)filterContext.HttpContext.User.Identity);
filterContext.HttpContext.User = user;
base.OnAuthorization(filterContext);
}
protected override void OnAuthentication(
System.Web.Mvc.Filters.AuthenticationContext filterContext)
{
//Private class to create a new IPrincipal based on my AppUserMgr
var user = _setCurrentUser(
(ClaimsIdentity)filterContext.HttpContext.User.Identity);
filterContext.Principal = user;
base.OnAuthorization(filterContext);
}
最佳答案
我找到了这个链接:http://brockallen.com/2013/01/17/adding-custom-roles-to-windows-roles-in-asp-net-using-claims/
从那里,我猜到了我的路
这是我所做的基础知识:
我最终覆盖了 Controller 的 OnAuthentication 方法,但仍然确保调用基础。我在一个扩展类中做到了这一点。这是概念:
public class AdfsController : Controller
{
//Some code for adding the AppUserManager (used Unity)
protected override void OnAuthentication(
System.Web.Mvc.Filters.AuthenticationContext filterContext)
{
base.OnAuthentication(filterContext);
//Private method to set the Principal
_setCurrentUser(filterContext.Principal);
}
private void _setCurrentUser(IPrincipal principal)
{
//Put code to find to use your ApplicationUserManager or
//dbContext. roles is a string array
foreach(var role in roles)
{
((ClaimsIdentity)((ClaimsPrincipal)principal).Identity)
.AddClaim(new Claim(ClaimTypes.Role, role));
}
}
}
在 Controller 中,您现在可以添加以下内容:
public class HomeController : AdfsController
{
//I used a magic string for demo, but store these in my globals class
[Authorize(Roles = "CoolRole")]
public ActionResult Index()
{
return View();
}
}
我通过检查分配给当前用户的角色来测试这一点,并且成功了!然后我将角色更改为“拒绝”之类的角色,未分配用户;我收到了 401 Unauthorized。
关于asp.net-mvc - 将角色添加到 ADFS IPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30131878/
我想模拟 IPrincipal 所以我这样做了 public Mock Principal { get; set; } 在我的 nunit 设置中 Principal = new Mock(); 所
我需要了解 SiteMapProvider.IsAccessibleToUser() 的工作原理。 内置 XmlSiteMapProvider 调用 HttpContext.User.IsInRole
是否可以使用 CaSTLe Windsor 将 IPrincipal 注入(inject)到我的 asp.net mvc Controller 中。本文作者Scott Hanselman评论中有代码可
我需要通过 Directory.GetDirectories() 和 Directory.GetFiles() 方法访问当前 IPrincipal 有权访问的文件和目录,而不列出其他文件。该进程本身作
我在 ASP.net MVC 应用程序中使用 Windows 身份验证。我想查询 Active Directory 以获取基于当前用户的用户电子邮件地址: IPrincipal principal =
我已经阅读了很多关于这个主题的问题和答案,但没有一个能帮助我解决这个问题。 我遇到的问题是 HttpContext.Current.User 或只是 User 属性的类型是 RolePrincipal
有没有办法实现下一个行为? public static void Configure(IServiceCollection services) { services.AddScoped(typ
伙计们,我不包括 ATM 代码,因为这似乎是 Azure B2C 设置问题,而不是编码问题。如果需要,我会上传它,但有问题的代码需要阅读很多。 问:是否有人成功从 Azure B2C“预览”租户迁移到
我正在 global.asax 中使用 Application_PostAuthenticateRequest 事件来创建自定义 IPrincipal 对象 void Application_Post
我正在实现一个我想在多个应用程序中使用的自定义 IPrincipal。我有 2 个关于 IsInRole 方法的问题... 1) 是否建议我将自定义 RoleProvider 与自定义 IPrinci
我正在尝试在我当前的 winforms 项目中实现授权和身份验证。身份验证还必须与 SQL Server 2008 数据库中的用户相匹配。问题是,它是一个多用户程序,所以当添加新用户时,会创建一个数据
我可以在他使用WCF服务时获取请求者窗口IPrincipal吗? 最佳答案 使用此代码,您可以检查 WCF 服务中的当前安全上下文。 如果用户已通过身份验证,并且 WindowsPrincipal 不
我正在使用 LINQPad 测试代码(我必须说这是一个多么棒的产品)但是现在当我尝试将 Thread.CurrentPrincipal 设置为标有 SerializableAttribute 的自定义
我有一个严重依赖用户授权的应用程序。在其中,我使用 IPrincipal.IsInRole() 检查用户是否在正确的组中: IPrincipal principal = Thread.CurrentP
我想在 asp.net 中扩展 IPrincipal 以允许我获得我将定义的用户类型。我想在 Controller 中实现这一点 string type = User.UserType 然后在我的扩展
因为 IPrincipal 具有 Identity 属性,在我的 User 类上实现这两个接口(interface)是否很好? 最佳答案 通常,用户和用户交互的安全上下文是不同的东西,因此如果以通用方
我假设 MembershipUser 对象和实现 IPrincipal 接口(interface)的对象在某种意义上是“连接的”,即当其中一个对象中的某些信息发生变化时,另一个对象也会相应地发生变化?
这个问题在这里已经有了答案: Can I access IIdentity from Web API (4 个回答) 8年前关闭。 我需要在我的操作过滤器中访问当前登录的用户 .身份由 Delegat
几天来我一直在寻找这个问题的答案,但我没有找到任何成功。我会发布链接,但它可能会占用整个页面。 所以这就是我所拥有的...... 我有一个 MVC 应用程序,它使用 WC-Federation 协议(
场景 我正在使用自定义IPrincipal和IIdentity进行asp.net授权。我设置了Principal和Identity期间PostAuthenticateRequest使用 IHttpMo
我是一名优秀的程序员,十分优秀!