相关疑难解决方法(0)

什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?

看看ASP.NET Identity(ASP.NET中的新成员实现),我在实现自己的时遇到了这个界面UserStore:

//Microsoft.AspNet.Identity.Core.dll

namespace Microsoft.AspNet.Identity
{ 
    public interface IUserSecurityStampStore<TUser> :
    {
        // Methods
        Task<string> GetSecurityStampAsync(TUser user);
        Task SetSecurityStampAsync(TUser user, string stamp);
    }
}
Run Code Online (Sandbox Code Playgroud)

IUserSecurityStampStore由默认实现EntityFramework.UserStore<TUser>,实质上获取和设置TUser.SecurityStamp属性.

经过一些挖掘之后,似乎a SecurityStampGuid在关键点新生成的UserManager(例如,更改密码).

因为我在Reflector中检查这段代码,所以我无法真正破译.几乎所有的符号和异步信息都已经过优化.

此外,谷歌也没有太多帮助.

问题是:

  • 什么是SecurityStampASP.NET标识,它用于什么?
  • SecurityStamp创建身份验证cookie时,是否扮演任何角色?
  • 是否有任何需要采取的安全措施或预防措施?例如,不要将此值向下游发送给客户端?

更新(2014年9月16日)

源代码在这里:

asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity

168
推荐指数
3
解决办法
6万
查看次数

ASP.NET身份,立即将另一个用户添加到角色(他们不必再次注销)

首先,我知道这个问题:MVC 5 AddToRole需要在它运行之前注销吗?

而这一个:什么是ASP.NET Identity的IUserSecurityStampStore <TUser>接口?

所以请不要将其标记为副本.

我正在尝试将另一个用户添加到角色中(即我们添加到该角色的用户不是当前用户.如果是,则我链接到的第一个问题的答案就足够了.)

像这样:

IdentityResult result = await userManager.AddToRoleAsync(userID, roleName);
Run Code Online (Sandbox Code Playgroud)

我正在做的两种情况是:从管理页面,当前用户是管理员; 以及基本身份验证保护的webhook(根本没有当前用户).

问题:如果此更改适用的用户已登录并使用该应用程序,我需要立即应用"添加到角色"更改.他们不应该退出并再次进行更改,而且需要立即进行.

感谢大家.

编辑:顺便说一下,User.IsInRole(roleName)要求注销和登录以反映被添加到新角色.UserManager.IsInRole(userID,roleName)没有,因为(我假设)它直接进入数据库表进行检查.但是如果用户点击了一个以他们刚刚添加的角色担保的动作方法,他们仍然需要再次登录,这是公平的.如果有办法解决这个问题仍然很好奇.

编辑:下面是授权属性的源代码:https://github.com/ASP-NET-MVC/aspnetwebstack/blob/4e40cdef9c8a8226685f95ef03b746bc8322aa92/src/System.Web.Mvc/AuthorizeAttribute.cs

它使用User.IsInRole,这本质上是我们需要再次登录的原因.似乎覆盖的方法是AuthorizeCore(HttpContextBase httpContext).我现在不是很勇敢或者不够好,但是如果你想要有很多人会发现这很有帮助.

c# asp.net asp.net-mvc asp.net-roles asp.net-identity

10
推荐指数
3
解决办法
2276
查看次数

如何强制更新自定义用户声明?

我在 ApplicationUser 类中添加了一个自定义声明,如下所示:

public class ApplicationUser : IdentityUser
{
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here
        if(Theme != null)
            userIdentity.AddClaim(new Claim("ThemeBundle", Theme.Bundle));

        return userIdentity;
    }

    public int? ThemeId { get; set; }
    [ForeignKey("ThemeId")]
    public virtual Theme Theme { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我像这样扩展了 Identity:

public static class IdentityExtensions
{
    public static string GetThemeBundle(this IIdentity identity)
    {
        var claim = ((ClaimsIdentity) identity).FindFirst("ThemeBundle");
        // Test for null to avoid issues during …
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc claims-based-identity asp.net-identity

5
推荐指数
1
解决办法
2682
查看次数