web-dev-qa-db-ja.com

リモートWebAPIを呼び出すためのベアラートークンをどのように生成しますか

私には2つのサイトがあります。ユーザーがログインしてアカウントを管理するサイトと、UIがなく、コンテンツを保存および取得するためのAPIにすぎないサイトです。これらのサイトは両方とも、同じOwin ASP.Net Identity2.0セットアップを使用します。 UIサイトは明らかな理由でCookieを使用し、APIサイトはBearerトークンを使用します。現在のユーザー認証を使用して、UIサイトからAPIメソッド/ URLを呼び出せるようにする必要があります。つまり、Rest API呼び出しを行うときにHTTPヘッダーに追加するために、UIサイトで有効なBearerトークンを生成する必要があります。

「信頼できる」クライアント認証を使用し、APIの/ Token urlを呼び出してベアラートークンを生成する方法を探していました。または、両方のサイトが同じコードを共有し、ユーザーテーブルがOwinメソッドを呼び出してベアラートークンを生成するためです。 APIヘッダーに渡すことができるUIサイトのコードであり、APIサイトはそれを有効なトークンと見なします。

これ以上の情報が必要な場合は、お知らせください。

更新: oAuth暗黙のフローでこれを行う正しい方法については、以下の更新された回答を参照してください。

11
John C

最終的にこの記事を見つけ、そのサンプルコードに従って、独自のOAuth認証サーバーを作成しました。これにより、UIサイトとの間で共有される信頼できるクライアントIDとシークレットを使用して、ユーザーに代わってユーザートークンをリクエストできます。 OAuthサーバー。

http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

更新1:機能や事柄についてさらに作業した後、トークンを作成するものに出くわしました。 Owin内には、すべての魔法を実行するTicketDataFormatクラスがあります。コンストラクターで1つのパラメーターを受け入れ、それはIDataProtectorです。 OwinリソースサーバーがミドルウェアオプションでデフォルトのAccessTokenFormat(TicketDataFormat)を使用している場合。デフォルトのDataProtectorとともに、クライアント側でトークン生成を複製できます。ところで、デフォルトのDataProtectorはMachineKeyを使用するため、2つのtrustedサイトには同じMachineKeyセットが必要ですweb.configにあります。すべての信頼できないサイトまたは部分的に信頼できるサイトは、上記のリンクに記載されている利用可能な標準のoAuthフローを利用する必要があります。

var protector = app.CreateDataProtector(typeof(OAuthAuthorizationServerMiddleware).Namespace, "Access_Token", "v1");
var tdf = new TicketDataFormat(protector);
var ticket = new AuthenticationTicket(){ ... };
var accessToken = tdf.Protect(ticket);

更新2:推奨される、実際にこれを行う唯一の方法は、oAuthを使用して、暗黙のフローを使用することです。正しいスコープと応答タイプが設定されたクライアント。

IdentityServer ドキュメントには、非常によく文書化されたチュートリアルがあり、非常に短い時間で起動して実行できます。具体的には、 ユーザーに代わってAPIを呼び出す セクション はじめに:MVC認証とWeb API チュートリアル。

14
John C