13

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

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

さらに情報が必要な場合は、お知らせください。

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

4

1 に答える 1

14

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

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つは信頼できますサイトには、web.config で同じ MachineKey が設定されている必要があります。すべての信頼されていないサイトまたは部分的に信頼されているサイトは、上記のリンクで説明されている標準の 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:推奨され、実際にこれを行う唯一の方法は、適切なスコープと応答タイプが設定されたクライアントで Implicit フローを使用する oAuth を使用することです。

IdentityServer3のドキュメントには、非常によく文書化されたチュートリアルがあり、短時間で立ち上げて実行することができました。特に、 「はじめに: MVC 認証と Web API」チュートリアルの「ユーザーに代わって API を呼び出す」セクション。

于 2014-08-16T04:57:57.610 に答える