[解決済み] OAuthでREST APIを保護しつつ、サードパーティのOAuthプロバイダによる認証を許可する(DotNetOpenAuthを使用する)
質問
製品のユーザーが、Web ユーザー インターフェイスを使用せずに製品の機能を直接統合できるように、わかりやすい REST API を備えた製品があります。
最近、さまざまな第三者から、私の製品のユーザーがその第三者のアプリケーションを使用してデータにアクセスできるように、彼らのデスクトップクライアントを API と統合することに関心を持たれています。
Twitter を使用したいアプリケーションは、Twitter がホストするログイン ページを使用して認証し、そのユーザーのデータにアクセスする許可を特定のアプリケーションに付与していることがわかりました。許可」または「拒否」ボタンをクリックすると、認証プロセスが完了します。私が知る限りでは、Facebook も同じメカニズムを使用しています。
私のAPIは.Netベースなので、DotNetOpenAuthを使用して、同様のメカニズムを提供するべきだと考えています。残念ながら、サンプルは (まったくないとしても) ほとんど文書化されておらず、私がオンラインで見つけることができた唯一のチュートリアルは、ユーザーがサード パーティ プロバイダーを使用して Web サイトにログインできるように、ログイン メカニズムを提供することに重点を置いているように思われます。
私なら
本当に は、REST API に私の Web アプリケーションのコア認証とビジネス ロジックをすべて処理させ、私の Web アプリケーションは OAuth を介して API を使用するだけの別のアプリケーションにすることです。ユーザーは、ユーザー名とパスワードを使用して直接、またはMyOpenIDやFacebookなどのサードパーティプロバイダを介して、ウェブサイト上で認証し、その後、ウェブサイトは何らかの形でREST APIに対して認証するために返されたトークンを使用することになります。
基本的には、OAuth サービスをホストするために API が必要なようですが、ユーザがサードパーティの OAuth サービスを使用することもできます。私は物事を複雑にしすぎているか、私がやろうとしていることが良い方法か悪い方法かを決定するために、OAuthについて十分に把握していないと思わざるを得ないのです。
誰かが、私が行う必要があるステップの少なくとも大まかな概要、またはこれを実現するために見るべきものを与えてくれますか?または、いくつかのチュートリアルを教えてください。あるいは、私の提案を爆破して、私がこれに関して (アーキテクチャ的に) まったく間違っていることを教えてください。
どのように解決するのですか?
まず、認証と認可の違いを強調したいと思います。
A ユーザ は、ユーザー名とパスワードのような認証情報を提供することで、あなたのウェブサイトを認証します。 OpenID では、これを置き換えるために、ユーザが 認証 を別のサービスで行うことで、これを置き換えることができます。このサービスは、ユーザーに代わってあなたの Web サイトにユーザーの身元を主張します。 あなたのサイトはサードパーティのサービス (OpenIDプロバイダ) を信頼し、ユーザがログインしていると見なします。
A サービス または アプリケーション はあなたのウェブサイトを認証しません -- 少なくとも通常は。 ユーザー は を承認します。 これは通常、アプリケーションがサービスプロバイダの承認を要求し、ユーザーをサービスプロバイダに送り、そこでまずユーザーが認証され(サービスプロバイダは誰と話しているかを知る)、次にユーザーがサイトに対して「はい、[アプリケーション]が私のデータに[何らかの制限付き]でアクセスすることを許可します」と言うことで実行されます。 それ以降、アプリケーションは 認証トークン を使用して、サービスプロバイダサイトのユーザーデータにアクセスします。 アプリケーションは自分がユーザーであるかのように自分自身を認証するのではなく、別のコードを使用して、特定のユーザーのデータにアクセスすることが許可されていることをサービスに保証していることに注意してください。
この区別が明確になったことで、認証と認可について、サイト上で完全に独立して決定することができます。 たとえば、ユーザーがユーザー名+パスワード、OpenID、および Facebook のすべてでログインできるようにしたい場合、そうすることができます。 完全に独立した決定として、アプリケーションの認証方法があります(このために使用できるプロトコルは数多くあり、もちろんOAuthは非常に有名です)。
OpenIDはユーザー 認証 . OAuth は、アプリケーションに重点を置いています。 認証 . しかし、Facebook や Twitter などの一部のサービスでは、OAuth を認証に使用しています。 と 認証に OpenID を使用し、認可に OAuth を使用する代わりに、認証と認可に OAuth を使用することを選択しました。
さて、あなた自身のプロジェクトのために、私は強くお勧めします。 ASP.NET MVC 2 OpenID Webサイト (C#) プロジェクト テンプレートが VS ギャラリーから利用可能です。 このテンプレートには、OpenID認証が付属しています。 と OAuthサービスプロバイダをサポートしています。 これは、あなたのユーザーがOpenIDでログインでき、サードパーティのアプリケーションやサービスがOAuthを使ってあなたのWebサイトにAPIコールを行い、ユーザーデータにアクセスできることを意味します。
このプロジェクト テンプレートが軌道に乗ったら追加したいと思うのは、ユーザーがユーザー名とパスワード、および OpenID でログインできるようにすることでしょう。 また、FacebookやTwitterをユーザーのオプションにしたい場合は、OpenID標準を使用しないので、それも実装する必要があります。 しかし、DotNetOpenAuthのダウンロードには、TwitterとFacebookでログインするためのサンプルが含まれているので、そこでいくつかのガイダンスを得ることができます。
認証の面ではあまりやることはないでしょう。 前述したようにOAuthが付属しており、おそらくそれで十分でしょう。
関連
-
[解決済み] JWTとBearer Tokenの違いは何ですか?
-
[解決済み] RESTを理解する。動詞、エラーコード、認証
-
[解決済み】OAuth 2の暗黙のグラント承認タイプの目的は何ですか?
-
[解決済み】アクセストークンが失効するのはなぜですか?
-
[解決済み】OAuth: ローカルのURLでテストする方法は?
-
[解決済み] REST API 認証
-
[解決済み] 複数のユーザーアカウントを統合するためのアーキテクチャ
-
[解決済み] OAuthでREST APIを保護しつつ、サードパーティのOAuthプロバイダによる認証を許可する(DotNetOpenAuthを使用する)
-
[解決済み】セッションは本当にRESTfulnessに違反するのか?
-
[解決済み] JWT (Json Web Token) Audience "aud" vs Client_Id - 違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] OAuth 2.0のBearer Tokenとは具体的に何ですか?
-
[解決済み] JWTとBearer Tokenの違いは何ですか?
-
[解決済み】OAuth2.メリットとユースケース - なぜ?
-
[解決済み】OAuth 2の暗黙のグラント承認タイプの目的は何ですか?
-
[解決済み】OAuth 2.0 Bearer Tokenとは、具体的にどのようなものですか?
-
[解決済み】OAuth: ローカルのURLでテストする方法は?
-
[解決済み] OAuth Authorization CodeとImplicitワークフローの違いは何ですか?それぞれを使用するタイミングは?
-
[解決済み] リソースサーバーのOAuth 2.0アクセストークンを検証する方法とは?
-
[解決済み] OAuthでREST APIを保護しつつ、サードパーティのOAuthプロバイダによる認証を許可する(DotNetOpenAuthを使用する)
-
[解決済み] JWT (Json Web Token) Audience "aud" vs Client_Id - 違いは何ですか?