3

DotNetOpenAuth使用して実装しなければならないシナリオと、対処しなければならない特定のフローに対する答えを見つけるのが非常に困難です。

下の図では、MVC サイトと API の両方を制御しています。API は、私の承認サーバーであり、リソース サーバーでもあります。

ユーザー名とパスワードの流れ

ユーザーが自分のシステムにローカル アカウントを作成した場合、ユーザー名とパスワードの資格情報を処理してサイトにログインさせ、それをトークン エンドポイントに渡し、その後、HandleTokenRequestクライアントがリソースへのアクセスを開始するためのアクセス トークンとリフレッシュ トークンを取得するために、承認サーバーの

OpenID の流れ

現在途方に暮れているフローは、ユーザーが Google 資格情報を使用してサイトにログインすることを決定した場合です (たとえば)。このシナリオでは、API で自分の承認サーバーからアクセス トークンとリフレッシュ トークンを付与するにはどうすればよいでしょうか?

API Token エンドポイントへのリクエストには何を含めますか?

ライブラリWebServerClientの一部であるクラスから継承する独自の API クライアントを作成しました。DotNetOpenAuth

呼び出されたトークンを処理するためのインターフェースが提供されているのを見てきましたが、IServiceProviderTokenManagerそれは私のような API クライアントの実装ではなく、OpenID プロバイダーのシナリオで使用されているようです。クライアント側で API トークンを所有していますが、それも確認したいですか?

Web サイトと API の両方が同じセキュリティ データベースに完全にアクセスできますが、リソースが保持されているデータベースにアクセスできるのは API だけです。ユーザー名とパスワードを持つローカル アカウントまたは openid プロバイダーを使用する一連のフローを示します。

4

1 に答える 1

1

完全を期すために、この質問を自分の回答で更新すると思いました。

私が最終的にやったのは、エンドポイントAuthorizeTokenエンドポイントを API 自体に含めるのではなく、MVC 4 アプリケーションに移動することでした。

このようにして、ログインしているユーザー (したがって、ASP.NET FormsAuthentication Cookie が存在する状態) で Authorize エンドポイントを呼び出すと、要求処理がこのコードにヒットしたときに付与された承認コードを取得できます。

        // Consider auto-approving if safe to do so.
        if (((OAuth2AuthorizationServer)this.authorizationServer.AuthorizationServerServices).CanBeAutoApproved(pendingRequest))
        {
            var approval = this.authorizationServer.PrepareApproveAuthorizationRequest(pendingRequest, HttpContext.User.Identity.Name);
            return this.authorizationServer.Channel.PrepareResponse(approval).AsActionResult();
        }

認証コードを取得したら、WebServerClientインスタンスを使用してそのRequestUserAuthorizationメソッドを呼び出してトークン エンドポイントを呼び出すことができます。

これがコールバックすると、アクセス トークンとリフレッシュ トークンをProcessUserAuthorization含むオブジェクトを返すメソッドを呼び出すことができます。IAuthorizationState

于 2013-06-06T16:23:29.337 に答える