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

本文关键字:身份验证 数据 存储 OAuth2 OAuthAuthorizationServerProvider Mvc | 更新日期: 2023-09-27 18:37:14

我很抱歉我的英语不好,我的法语。我会尽力解释我的问题。

我有一个OAuthAuthorizationServerProvider希望工作正常

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

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

我可以简单地将refresh_token存储在表中,然后在每个请求上引用它,但我不喜欢像那样存储合理的数据,特别是如果框架提供了一种做我想做的事情的方法。

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

坦克为我指明了正确的道路。

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

在你的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,并且可能会混淆两者。 看看这篇博文,它应该给你一个很好的例子。

另请查看 ASP.NET 身份推荐资源页面。