2017-03-06 19 views
0

我正在開發一個小應用程序,允許用戶使用他們的Twitter帳戶登錄到網站。然後,一旦完成,我打算使用該帳戶與Twitter API執行各種操作。但爲了做到這一點,我需要先前獲得的訪問令牌祕密,但我不知道如何。如何在ASP.NET 5 Identity中檢索用戶的訪問令牌和密碼?

我在樣板WebApp上使用.NET Core ASP.NET v5。 Twitter身份驗證設置:

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

如何在用戶使用Twitter身份驗證成功登錄後檢索存儲的訪問令牌和密鑰?

我認爲這是沿着User.Identity.*User.Claims.*行的東西。

+0

的關鍵和祕訣來自Twitter的,特別是從** **你的Twitter帳戶,而不是用戶誰登錄。 – DavidG

+0

是的,正如OP中所述,我已經使用身份驗證設置來檢索該身份驗證。不過,我需要我以後再次存儲的令牌和密碼。 –

+0

你不應該在任何地方存儲,特別是不在用戶聲明中。 – DavidG

回答

1

您只需將值添加到用戶的身份驗證聲明中即可。在你Startup.Auth.cs,你需要增加以下內容:

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實例:

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); 

然後,當你需要的值,就可以通過檢索它們,雖然如此,你需要正確的零檢查,然後訪問他們的ClaimValue屬性:

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

謝謝,這看起來很穩固。只是要清楚 - 這是一個推薦的做法?我認爲令牌和/或祕密在某些時候會失效,因此我需要處理任何未授權的問題,然後更新它們等。 –

+1

好吧,它來源於官方ASP中列出的一篇文章。 NET身份資源,所以我認爲沒關係。這些聲明是在auth上設置的。如果Twitter身份驗證過期,他們將不得不再次實施,所以這不是一個真正的問題。此外,如果內存服務,Twitter用戶密鑰/祕密是長期的,甚至是永久的,至少只要你的應用程序保持授權。請求是通過HMAC簽名製作的,該簽名將用戶的密鑰/祕密與應用程序的密鑰/祕密相結合,因此它更加安全。例如,Facebook只使用持票人令牌,因此需要刷新這些令牌。 –

相關問題