2

OAUth2 Web サーバー フローを使用して、次のことを行いました。

  1. ユーザーが www.third-party.com/welcome にアクセスしようとしています
  2. ユーザーは www.myserver.com/oauth2/authorize にリダイレクトされます
  3. MyServer はユーザーを認証し、www.third-party.com/welcome?code=... にリダイレクトします。
  4. third-party.com は舞台裏で myserver.comcodeと通信し、OAuth2 アクセスとリフレッシュ トークンを交換します。

すべて良い。third-party.com はユーザーの正規のユーザー名を決定する必要があるため、www.myserver.com/api/{username}/details などのリソースに対して ReSTFUL URI 呼び出しを行うことができます。

ASP.NET MVC で DotNetOpenAuth を使用しています。私の OAuth2 コントローラーは次のようになります。

名前空間 OurOAuth2.Server.Controllers { [Authorize] public class OAuth2Controller : Controller { private readonly AuthorizationServer authServer; プライベート読み取り専用 IOAuth2ClientAuthorizationStore authStore;

    private OAuth2AuthorizationServerHost authHost {
        get {
            return (((OAuth2AuthorizationServerHost)authServer.AuthorizationServerServices));
        }
    }

    public OAuth2Controller(AuthorizationServer authServer, IOAuth2ClientAuthorizationStore authStore) {
        this.authServer = authServer;
        this.authStore = authStore;
    }

    [AllowAnonymous]
    public ActionResult Token() {
        var result = this.authServer.HandleTokenRequest(this.Request);
        return (result.AsActionResult());
    }

    public ActionResult Secure() {
        return (Content("This is secure!"));
    }

    public ActionResult Authorize() {
        var request = this.authServer.ReadAuthorizationRequest(this.Request);
        if (authHost.CanBeAutoApproved(request)) {
            var approval = this.authServer.PrepareApproveAuthorizationRequest(request, HttpContext.User.Identity.Name);
            authStore.StoreAuthorization(request.ClientIdentifier, User.Identity.Name, request.Scope);

            // Any way, at THIS point, to include the canonical username in the 
            // token exchange?
            var response = this.authServer.Channel.PrepareResponse(approval);
            return response.AsActionResult();
        }
        // no scope authorization workflow yet.
        return (null);
    }
}

私は3つのアプローチを見ることができます:

  1. www.myserver.com の (ReSTful ではない) URI エンドポイントは、サプライヤー ベアラー トークンを承認したユーザーの詳細を返します。そのため、サードパーティ アプリは OAuth2 ベアラー トークンで /userinfo をヒットし、ユーザーの詳細を取得します。ユーザー名。

  2. アクセス トークンからユーザー ID を取得する - しかし、これにはクライアント アプリケーションの一部であってはならない復号化キーが必要であると理解しています (?)

  3. サードパーティ アプリと oauth2 認証サーバー間のトークン交換に、いくつかの追加のユーザー状態データを含めます。

(2)はダメだと思います。(1) は簡単に実装できますが、(3) の方法が可能かどうか、またどのようにすればよいか知りたいです。

4

1 に答える 1