Mvc OAuth2如何在OAuthAuthorizationServerProvider中存储当前身份验证的数据

时间:2015-01-13 03:19:33

标签: c# asp.net-mvc oauth oauth-2.0 asp.net-identity

对不起我的英语不好,我是法国人。 我会尽力解释我的问题。

我有OAuthAuthorizationServerProvider 希望工作正常

这是为了允许其他应用程序与我的Asp.Net Identity 2.0身份验证服务器连接。

我希望存储当前身份验证的数据。如果用户连接两次,则不必具有相同的存储数据。我不认为Session是正确的,因为我不使用cookie。我使用Bearer,access_token和refresh_token。

我可以简单地将refresh_token存储在一个表中,然后在每个请求中引用它,但我不想存储这样的敏感数据,特别是如果框架提供了一种方法来做我想要的。

我需要存储与每个外部身份验证相关的数据,而不是用户。类似于声明但仅适用于当前的身份验证会话。

坦克让我指出了正确的道路。

1 个答案:

答案 0 :(得分:0)

OAuthAuthorizationServerProvider中,您将覆盖GrantResourceOwnerCredentials方法。这是您将验证用户的地方,也是您可以为用户添加其他声明的地方。

以下示例针对ASPNet Identity验证用户,并为返回的身份添加其他声明。

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });

        var mgr = context.OwinContext.GetUserManager<ApplicationUserManager>();

        var user = await mgr.FindAsync(context.UserName, context.Password);
        if (user == null)
        {
            context.SetError("invalid_grant", "The user name or password is incorrect.");
            return;
        }

        var identity = new ClaimsIdentity(context.Options.AuthenticationType);
        var usrIdentity = await mgr.CreateIdentityAsync(user, context.Options.AuthenticationType);

        foreach (var c in usrIdentity.Claims)
        {
            identity.AddClaim(c);
        }

        //
        // Add additional claims to your identity
        //
        identity.AddClaim(new Claim("your_custom_claim", "your_custom_claim_value"));

        context.Validated(identity);
    }

那就是说,在你的评论中,你似乎在同一个句子中使用Cookie和Token,并且可能会混淆两者。查看this blog post,这应该会给你一个很好的例子。

另请查看ASP.NET Identity Recommended Resources页面。