このシナリオがあります。企業サイト (MVC 4) と Web ショップです。OAuth 2 SSO 機能を追加します。どちらのサイトにも独自のメンバーがいますが、企業サイト (私が担当) も OAuth 2 認証サーバーとして機能する必要があり、各メンバーの Web ショップ ユーザー ID を保存します。ショップは次のエンドポイントを要求しました。
認証エンドポイント
• 認可:
…/oauth2/authorize?client_id={CLIENT_ID}&state={STATE}&response_type=code&redirect_uri={REDIRECT_URI}
• トークン
…/oauth2/token?code={TOKEN}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&redirect_uri={REDIRECT_URI}&grant_type=authorization_code
…/oauth2/token?refresh_token={TOKEN}&client_id={CLIENT_ID}&client_secret={CLIENT_SECRET}&redirect_uri={REDIRECT_URI}&grant_type=refresh_token
API エンドポイント
• getid (メンバーのショップ ID を含む JSON を返します):
…/oauth2/api/getid?access_token={TOKEN}
私は OAuth の経験がないので、DotNetOpenAuth サンプルを見て、 OAuthAuthorizationServer を実装する必要があると結論付けましたが、私の要件に合わせてサンプルを変更することは、より多くのことを行うようで複雑であるため困難です。
DotNetOpenAuth の調査には非常に時間がかかるように思われるので、お聞きしたいのですが、OAuthAuthorizationServer サンプルを変更することは正しい方法ですか? または、ネイティブ実装を作成するか、自分の状況で使いやすい別の OAuth ライブラリを試す必要がありますか?
私の全体的な計画についてコメントしてください:
- 企業サイト メンバーのログイン フローを維持する 標準フォーム認証、簡単な LogOn コントローラー
-アクションとして 3 つの必要なエンドポイントを実装する OAuth コントローラーを追加します。
-承認アクションに到達すると、クライアントを検証し、logOn にリダイレクトして、redirect_uri を渡します。サンプルのfromから調査を開始し、 を返す必要があると思います。これは正しいです?Authorize
ActionResult
OAuthController.cs
AccountAuthorizeModel
- ユーザーがログインした後、認証エンドポイントからログイン ページに到達した場合は、コードを添付して redirect_uri にリダイレクトします。どこから始めればいいのかわからない。PrepareApproveAuthorizationRequest
ではPrepareResponse
?コードはどこから来たのですか?フローのどこでデータベースに新しい ClientAuthorization を追加する必要がありますか?
-ショップはコードを使用して、/token エンドポイントからトークンを取得または更新します。単に戻るHandleTokenRequest
?
-トークンを使用すると、ショップ サイトはメンバー データの JSON を取得できます。トークンを検証する方法を見つける必要があります
ここで、クライアント ID とシークレットを格納する Clients テーブルと、誰が承認されたかを追跡する ClientAuthorization を追加する以外に、DotNetOpenAuth サンプルの他のテーブルが使用されているかどうか、いつ Nonce、SymmetricCryptoKey、User.
OAuth2AuthorizationServer.cs の変更は簡単に思えます。実際の証明書を追加し、クライアントがデータ コンテキストからプルされていることを確認するだけです。
ありがとう!