OAUth2 Web サーバー フローを使用して、次のことを行いました。
- ユーザーが www.third-party.com/welcome にアクセスしようとしています
- ユーザーは www.myserver.com/oauth2/authorize にリダイレクトされます
- MyServer はユーザーを認証し、www.third-party.com/welcome?code=... にリダイレクトします。
- third-party.com は舞台裏で myserver.com
code
と通信し、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つのアプローチを見ることができます:
www.myserver.com の (ReSTful ではない) URI エンドポイントは、サプライヤー ベアラー トークンを承認したユーザーの詳細を返します。そのため、サードパーティ アプリは OAuth2 ベアラー トークンで /userinfo をヒットし、ユーザーの詳細を取得します。ユーザー名。
アクセス トークンからユーザー ID を取得する - しかし、これにはクライアント アプリケーションの一部であってはならない復号化キーが必要であると理解しています (?)
サードパーティ アプリと oauth2 認証サーバー間のトークン交換に、いくつかの追加のユーザー状態データを含めます。
(2)はダメだと思います。(1) は簡単に実装できますが、(3) の方法が可能かどうか、またどのようにすればよいか知りたいです。