2017-03-06 8 views
0

私はユーザーが自分のTwitterアカウントでサイトにログインできるようにする小さなアプリを開発しています。その後、それが完了すると、Twitter APIでさまざまなアクションを実行するためにアカウントを使用する予定です。しかしこれを行うには、以前に入手したアクセストークン秘密が必要ですが、私はどのようにしたらよいかわかりません。ASP.NET 5 IDでユーザーのアクセストークンとシークレットを取得するにはどうすればよいですか?

ボイラプレートWebAppで.NET Core ASP.NET v5を使用しています。 Twitterの認証設定で:

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

どのようにユーザーが正常にTwitterの認証でログインした後、私はトークンと秘密保存されたアクセス権を取得するのですか?

User.Identity.*またはUser.Claims.*の行に沿ったものと仮定します。

+0

鍵と秘密特別**あなたの** Twitterアカウントから、ツイッターから来る、ないユーザー:あなたは適切にnullをチェックして、そのClaimValueプロパティにアクセスする必要があります、しかし、ので、誰がログインしていますか。 – DavidG

+0

はい、私はすでにアイデンティティ認証の設定でそれを取得しています。しかし、私はトークンと私が後で再び保管した秘密が必要です。 –

+0

あなたはどこにでも、特にユーザーの主張には格納しないでください。 – DavidG

答えて

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

あなたが値を必要とするときに、あなたがそれらを取得することができます経由:これらは、実際のIdentityClaimインスタンスである

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

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アイデンティティリソース、私はそれが大丈夫だと仮定します。これらの主張は認証時に設定されます。 Twitter認証が期限切れになった場合、再び再認証する必要があります。実際問題ではありません。また、メモリが使用されている場合、少なくともあなたのアプリが承認されている限り、Twitterユーザの鍵/秘密は長く存続し、おそらく永久にさえなります。リクエストは、ユーザーのキー/シークレットとアプリケーションのキー/シークレットの両方を組み合わせたHMAC署名を使用して行われるため、より安全です*ロット*です。たとえば、Facebookはベアラトークンを使用するだけなので、それらをリフレッシュする必要があります。 –

関連する問題