asp.net - 将角色分配给匿名 session

标签 asp.net webforms roleprovider

我们的网站使用 ASP 角色和成员身份提供商系统进行表单例份验证。我们已将文件组织到文件夹中,这些文件夹通过文件夹 web.config 文档强制执行授权列表(例如:您必须具有管理员角色才能访问 ~/Admin 文件夹中的页面),并且我们不允许匿名(未登录)访问除了在站点根目录中。网站托管在 IIS7.5 上,具有 .Net 4.0 绑定(bind)和脚本映射。

利益相关者现在要求我们允许 PIN 对特定用例进行身份验证,在这些用例中,用户尚未拥有凭据,但已收到带有 PIN 的信件。

我们编写了一个堆栈来验证 PIN 码以进行身份​​验证,但我们没有办法告诉他们的成员资格/角色 API 他们现在是登录用户,因为他们使用 PIN 绕过了我们的 SSO。

我需要找到一种方法,当运算符(operator)提供有效的 PIN 时,将角色临时分配给匿名 session ,以便他们可以使用文件夹中不允许匿名访问的页面。

我看到有迹象表明您可以将个人资料信息与匿名用户联系起来,但我无法找到有关为用户(实际上是 session )分配角色的任何信息。

是否有人有任何想法可以将角色分配给匿名用户,以便他们可以导航过去需要特定角色的授权列表?

最佳答案

尝试扩展ClaimsAuthenticationManager。您可以覆盖身份验证。这应该允许您将 PIN 用户视为经过身份验证的用户,并允许您分配角色。

public class ClaimsTransformer : ClaimsAuthenticationManager
{
    public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
    {...

您可以在 Global.asax.cs(或 .vb)中激活扩展的 ClaimsAuthenticationManager。此示例来自 ASP.NET MVC 应用程序。 (您没有提及您使用的是 MVC 还是 WebForms。)

public class MvcApplication : System.Web.HttpApplication
{

    ...

    protected void Application_PostAuthenticateRequest()
    {
        var principal = ClaimsPrincipal.Current;
        var transformer = new ClaimsTransformer();

        var newPrincipal = transformer.Authenticate(string.Empty, principal);

        Thread.CurrentPrincipal = newPrincipal;
        HttpContext.Current.User = newPrincipal;
    }
}

关于asp.net - 将角色分配给匿名 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310264/

相关文章:

c# - 如何使用ASP.NET成员资格提供程序类

asp.net-mvc - 在 ASP.NET 标识框架中更改时刷新当前用户的角色?

c# - 在 ASP.NET MVC 5 Controller 中使用 POST 从 dotnet Core Web API 下载文件

javascript - 从 Javascript 访问 ASP.NET 文字值

javascript - JS .hover 可见性不起作用(ASP.NET、VS2013、Web 表单)

asp.net - 从中继器数据绑定(bind)数据设置用户控件的属性

asp.net - 以声明方式访问转发器内的页面属性数据绑定(bind)

c# - IsUserInRole 调用 GetRolesForUser?

asp.net - 尝试实现 ELMAH - 不断收到 IIS HTTP 500.22 错误

asp.net - 如何以及在何处根据请求在 winforms 中存储 nhibernate session