对不起我的英语不好,我是法国人。 我会尽力解释我的问题。
我有OAuthAuthorizationServerProvider 希望工作正常。
这是为了允许其他应用程序与我的Asp.Net Identity 2.0身份验证服务器连接。
我希望存储当前身份验证的数据。如果用户连接两次,则不必具有相同的存储数据。我不认为Session是正确的,因为我不使用cookie。我使用Bearer,access_token和refresh_token。
我可以简单地将refresh_token存储在一个表中,然后在每个请求中引用它,但我不想存储这样的敏感数据,特别是如果框架提供了一种方法来做我想要的。
我需要存储与每个外部身份验证相关的数据,而不是用户。类似于声明但仅适用于当前的身份验证会话。
坦克让我指出了正确的道路。答案 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,这应该会给你一个很好的例子。