2017-03-05 8 views
2

これらのうちどれをサーバからサーバへのJWTをセットアップするのが最も簡単なのでしょうか?私はすでに既存のJWTトークンを持っていますが、トークンを通過するためにサーバー全体をセットアップする必要はありますか?IdentityServer 4またはOpenIddict?

別のサーバーでホストされているWeb APIのクライアントを作成するには要件がありますが、.NET Coreの資格情報を他のサーバーに渡す方法を見つけることはできません。 GETとPOSTを使用してC#を使用してリモートサーバーAPIにアクセスし、GETの結果を表示するグラフを作成します。

+0

すでにjwtトークンがありますか?どこから、なぜ、トークンを提供した権限を使用してWeb-APIで使用したいのかを検証できないのですか?アイデンティティ・サーバーは簡単に設定でき、独自のIDプロバイダに接続することができます。また、保護されたリソースがミドルウェアを使用して、整合性を検証することができます。 – Mashton

+0

私は本当にこれに組み込まれた認証を必要としません。私はクライアントにサービスを提供しません。私はクライアントです。私の質問は、どのようにトークンを私の要求に渡すのですか.netコアでは単純ではないようですすべて私には、私は新しいトークンを取得しない、私はリモートへのログインを持っていない、私は郵便受けを使用して要求を送信することができますが、ポストにヘッダーを追加するか、ドキュメンテーションでは、依存性注入のためのhoorayとすべてを見つけることができますが、実際には時には必要以上に困難になることがあります。 – webdev8183

+6

@ johnny5あなたの議論を提示しなくても、「アイデンティティ・サーバー4はこれまでに最大の痛みです」と言っているのはちょっとしたことです。 IdSrvは無料のOSSプロジェクトであるため、プロジェクトのオーナーに連絡して、「苦労点」の修正方法を教えてください。 – Pinpoint

答えて

0

すでにトークンがある場合、IdentityServer4またはOpenIddictは必要ありません。 IdentityServer4とOpenIddictは要求に応じてトークンを発行しますが、すでにローカルで発行しているようです。

私は、HTTPS経由のPOSTを実行するフォームを使用して、サイトAからサイトBに自分のトークンを送信しました。

<form action="https://other-server.example.com/Account/" method="post" id="form"> 
    <input name="token" type="hidden" value="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."> 
</form> 

JavaScriptを使用して自動的にフォームを送信することもできます。

+1

OAuth2やOpenID Connectのような標準プロトコルを実装することの肯定的側面の1つは、脅威モデルが一般によく知られていることです。残念ながら、あなたの手作りのプロトコルはXSRF /セッション固定攻撃の脆弱性があります。悪意のある人としては、 'https:// other-server.example.com/Account /'を指すHTML自動ポストフォームを作成することはできません。自分自身のトークンの1つを送ります。犠牲者が自分の悪意のあるページにアクセスした場合、自分のアカウントで自動的にログインし、犠牲者があなたのウェブサイトに個人情報を送信すると、データ漏洩の可能性があります。 – Pinpoint

+0

@Pinpointご意見ありがとうございました。それは私が考慮しなかった非常に有効なポイントです。私は、HTTP Refererヘッダーをチェックして信頼できる発信元から送信されたものであることを確認することで軽減できると思います。いずれにしても、私はあなたの質問にあなたの提案された解決策で回答を投稿するのが大好きです。 – Fred

0

Cookieを設定してからサブドメインにリダイレクトすることができます。 この方法の利点は、Pinpiontが指摘しているようにXSRF /セッションの固定攻撃を防ぐことです。欠点は、両方のサイトがいくつかのドメインに存在しなければならないことです。

[RequireHttps] 
    public IActionResult Redirect() 
    { 
     var token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."; 
     const string domain = "subdomain.example.com"; 

     Response.Cookies.Append("token", token, new CookieOptions { 
      Domain = domain, 
      Expires = DateTime.Now.AddHours(1), 
      HttpOnly = true, 
      Path = new PathString("/Account"), 
      Secure = true, 
     }); 

     return Redirect($"https://{domain}/Account"); 
    } 
関連する問題