如何在ASP.NET 5 Identity中检索用户的访问令牌和密钥?

时间:2017-03-06 18:13:31

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

我正在开发一个小应用程序,允许用户使用他们的Twitter帐户登录该网站。然后,一旦完成,我打算使用该帐户使用Twitter API执行各种操作。但是,为了做到这一点,我需要先前获得的访问令牌秘密,但我不知道如何。

我在样板WebApp上使用.NET Core ASP.NET v5。 Twitter身份验证设置:

app.UseTwitterAuthentication(new TwitterOptions()
{
    ConsumerKey     = "BLAH",
    ConsumerSecret  = "BLAH"
});

一旦用户使用Twitter身份验证成功登录,如何检索存储的访问令牌和秘密?

我认为这是User.Identity.*User.Claims.*

1 个答案:

答案 0 :(得分:1)

您只需将值添加到用户对身份验证的声明中。在Startup.Auth.cs中,您需要添加以下内容:

var twitterOptions = new Microsoft.Owin.Security.Twitter.TwitterAuthenticationOptions
{
    ConsumerKey = /* Your App's Consumer Key */,
    ConsumerSecret = /* Your App's Consumer Secret */,
    Provider = new Microsoft.Owin.Security.Twitter.TwitterAuthenticationProvider
    {
        OnAuthenticated = (context) =>
        {
            context.Identity.AddClaim(new System.Security.Claims.Claim("urn:twitter:access_token", context.AccessToken, XmlSchemaString, "Twitter"));
            context.Identity.AddClaim(new System.Security.Claims.Claim("urn:twitter:access_token_secret", context.AccessTokenSecret, XmlSchemaString, "Twitter"));
            return Task.FromResult(0);
        }
    }
};
app.UseTwitterAuthentication(twitterOptions);

然后,当您需要这些值时,可以通过以下方式检索它们:

var twitterTokenClaim = user.Claims.FirstOrDefault(m => m.ClaimType.EndsWith("twitter:access_token"));
var twitterSecretClaim = user.Claims.FirstOrDefault(m => m.ClaimType.EndsWith("twitter:access_token_secret"));

这些是实际的IdentityClaim个实例,因此您需要正确地进行空检查,然后访问其ClaimValue属性:

if (twitterTokenClaim != null && twitterSecretClaim != null)
{
    // work with Twitter API
    // Token and secret string values accessed via `twitterTokenClaim.ClaimValue`
    // and `twitterSecretClaim.ClaimValue`, respectively
}