0

我实现了两因素身份验证,如http://blogs.msdn.com/b/webdev/archive/2014/02/18/adding-two-factor-authentication-to-an-application-using-asp-net中所示-identity.aspx但我想在模板视图中向用户展示TokenViewModel object具有两个属性,TokenDate并由View和atTokenString检索。@User.Identity.GetLastUserToken().TokenDate@User.Identity.GetLastUserToken().TokenString

我只是这样做。

public static class ApplicationIdentityExtensions
{
    public static string FindFirstValue(this ClaimsIdentity identity, string claimType)
    {
        return null;
    }

    public static TokenViewModel GetLastUserToken(this IIdentity identity)
    {
        return new TokenViewModel(){ TokenDate = DateTime.Now, TokenString= "Token from Mock" };
    }

}

正如你所看到的,EmailTokenProviderin manager.RegisterTwoFactorProvider("EmailCode", new EmailTokenProvider<ApplicationUser>()line 是IUserTokenProvider<TKey, TValue>由我自己在我的项目中实现的。

这个继承必须实现这些方法:

    public Task<bool> ValidateAsync(string purpose, string token, UserManager<Usuario, int> manager, Usuario user)
    {
        //TODO: I guess, must to validate user custom token here using my _respositoryToken.

我想在 User.Identity 范围内设置令牌 var,但我不确切知道。

        return Task.FromResult(true);
    }

我怎样才能做到这一点?

4

1 回答 1

0

我在这里找到了解决方案http://kevin-junghans.blogspot.co.uk/2013/12/using-claims-in-aspnet-identity.html

只需在下面实现这些代码:

var prinicpal = (ClaimsPrincipal)Thread.CurrentPrincipal;
var lasttoken = prinicpal.Claims.Where(c => c.Type == ClaimTypes.UserData).Select(c => c.Value).SingleOrDefault();

看:

public static TokenViewModel GetLastUserToken(this IIdentity identity)
{
    var prinicpal = (ClaimsPrincipal)Thread.CurrentPrincipal;
    return prinicpal.Claims.Where(c => c.Type == ClaimTypes.UserData).Select(c => c.Value).Select(i => new TokenViewModel{ TokenValue = i }).SingleOrDefault();
}
于 2014-03-21T18:01:32.807 回答