我使用的是ASP.NET Identity 2.0。我看到许多类似这样的ASP.NET标识示例:
const string XmlSchemaString = "http://www.w3.org/2001/XMLSchema#string";
var facebookOptions = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationOptions
{
AppId = ConfigurationManager.AppSettings.Get("FacebookAppId"),
AppSecret = ConfigurationManager.AppSettings.Get("FacebookAppSecret"),
Provider = new Microsoft.Owin.Security.Facebook.FacebookAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
var claim = new System.Security.Claims.Claim("urn:facebook:access_token", context.AccessToken, XmlSchemaString, "Facebook");
foreach (var x in context.User)
{
string key = string.Format("urn:facebook:{0}", x.Key);
string value = x.Value.ToString();
claim.Properties.Add(key, value);
}
context.Identity.AddClaim(claim);
return Task.FromResult(0);
}
}
};
AddClaim看起来只是将这些声明添加到内存中。不存储在数据库中。这正常吗?我的意思是,如果我想将这些声明存储到数据库中并在之后读取,我该怎么办。我很少看到任何关于这方面的代码示例。
它通常在回调中,将外部提供者的声明映射到DB,然后发布一个新的cookie来为应用程序建模主身份验证cookie。这可能有助于解释更多:
http://brockallen.com/2014/01/09/a-primer-on-external-login-providers-social-logins-with-owinkatana-authentication-middleware/