2013-07-15 10 views
15

私はWeb APIアプリケーションを持っていますが、OAuthは認証サーバーが認証トークンを生成してサーバーに送信してサービスを利用できるようにするAPIの標準セキュリティーモデルであると理解しています。OAuthを使用してWeb APIアプリケーションを保護する方法を教えてください。

私はこれに非常に新しいですが、私は関与の役割を理解する:

  • リソースの所有者
  • クライアント
  • リソースサーバ
  • 認証サーバ

しかし、何のOAuthがあります正確には実際には、理論ではない? .NETライブラリですか?それは別の会社によって提供されるサービスですか?私のローカル開発マシンで設定して、それがどのように動作するか見ることができますか?

OAuthを使用してWeb APIアプリケーションを保護する方法を教えてください。

答えて

17

OAuthはプロトコルです。現在のバージョンはOAuth 2.0です。あなたの質問にもっと、そのリンクは様々な技術のプロトコルのいくつかの実装をリストしています。 .NET Web APIで使用する場合は、おそらくDotNetOpenAuthに興味があり、OAuth 1とOAuth 2の両方の実装を提供します。

私は.NET Webを保護するために現在作業中のアプリケーションでDotNetOpenAuthを使用していますAPI。私はOAuth2Handlerを持っています。それは、着信要求がどのコントローラにも届く前にWeb APIパイプラインに挿入されているDelegatingHandlerを拡張しています。 OAuth2Handlerは、次の操作を実行します。

  1. がDotNetOpenAuthをインスタンス化しResourceServer
  2. コール読み込み、AuthorizationServerによって他の場所で発行したアクセストークンを (復号化し、 OAuthPrincipal(私の場合は私が読んでいる追加のデータを返しますResourceServer.GetPrincipal()ことDotNetOpenAuth実装では、ClaimsPrincipalを渡して作成することができます。
  3. アクセストークンから読み取ったユーザー情報を含むIPrincipalに、スレッドの現在のHTTPコンテキストそれは、サービスコントローラーでApiController.Userプロパティから提供されています:正直なところhttpContext.User = Thread.CurrentPrincipal = principal;

、例えば(これはすべての作業を取得します認証サーバー、リソースサーバー、証明書などの設定)は簡単ではありません。残念ながら、DotNetOpenAuthサイトには良いガイドがないようです。ここでは、このルートを行く場合は、あなたの前にありますいくつかの他のタスクです:

  • IAuthorizationServerを実装する - これは、ライブラリにプラグインして 彼らを使用することができます DotNetOpenAuthが提供するインタフェースですOAuth2アクセストークンを発行する実装。また、格納するためにEntityFrameworkコンテキストを使用したINonceStoreICryptoKeyStoreを実装する必要があります。
  • - AuthorizationServerResourceServerはそれぞれアクセストークンを暗号化/復号化するために証明書を使用し、相互にしかアクセスできないようにします。私はcustom configurationを構築したので、私の認証サーバーアプリケーションとWeb APIサービス(リソースサーバー)のファイルweb.configにこの構成を管理することができました。
  • リフレッシュトークンの管理 - 最初に認証サーバーからアクセストークンを要求すると、OAuth2リフレッシュトークンとアクセストークンの両方が返されます(設定に応じて)。サービスは、短命であるべきアクセストークンを使用する。リフレッシュトークンは、より多くのアクセストークンを取得するために使用されます。リフレッシュトークンは、秘密にしておく必要があります。私にとっては、リフレッシュトークンがWebアプリケーションのクライアントサイドのJavaScriptに公開されないことを意味します。

OAuthと.NET Web APIをどのように使い始めるかについての高いレベルのアイデアを得ることができれば幸いです。これらのステップのいくつかを示すa blog postがあります。 This SO answerは、画像のクライアント側の詳細をいくつか示します。

(DotNetOpenAuthのオンラインドキュメントは現在表示されていないようです...それらにはリンクがありません;明らかにhappened beforeです)。

+0

いくつかのソースコードを共有する可能性があります。私はこれを数時間かけてプレイしてきましたが、ちょっとしたピタです。 DotNetOpenAuthドキュメントは、この特定のインスタンスではあまり役に立ちませんでした。 –

関連する問題