5

WCF Restful サービスのクレームベース認証に基づいて、多くの記事と SO の質問を受け取りましたが、MVC Web API を使用して RESTful サービス (WCF Rest Service ではありません) を開発しています...

クレームベース認証を使用してRESTfulサービスを保護する方法を理解するのを手伝ってくれませんか?

必要なものは次のとおりです。

  1. Web アプリと MVC4 Web-API サービスがあります
  2. STSがあります
  3. MVC Web アプリは STS を信頼します
  4. ユーザーが Web アプリにログインすると、STS ログイン ページにリダイレクトされます。
  5. ログインすると、MVC Web サイトにリダイレクトされます。
  6. この Web アプリは、web-API サービスを呼び出します。

今、私はポイント#4で立ち往生しています。RESTful サービスがありますが、WIF を実装する必要があります。

誰でもこれで私を助けてくれませんか。

注:私はWCF Restserviceを使用していませんが、MVC Web APIを使用しています

4

2 に答える 2

11

あなたの説明から、委任された ID モデルを使用しているようです。つまり、ユーザーは Web アプリケーションにサインインし、Web アプリケーションが Web API サービスを呼び出すときに、現在ログインしているユーザーの ID を使用します。

その場合は、「ブートストラップ トークン」を保存するように WIF を構成する必要があります。これにより、元のセキュリティ トークンが現在の ClaimsIdentity のプロパティとして使用できるようになります。これを使用して、要求の Authorize ヘッダーを Web API サービス呼び出しに設定できます。

.Net 4.5 でこれをオンにするには、WIF 要素の saveBootstrapContext 属性を true に設定します。

<system.identityModel>
   <identityConfiguration saveBootstrapContext="true">
   ...

.Net 4 の場合、構成は次のようになります。

<microsoft.identityModel>
   <service saveBootstrapTokens="true">
   ...

次に、Web アプリケーションからアクセスするには、Web API を呼び出すコントローラーで (所有している ID の数に応じて) 次のようにします。.Net 4.5 の場合:

SecurityToken token = (User as ClaimsPrincipal).Identities[0].BootstrapContext;

.Net 4 の場合:

SecurityToken token = (User as ClaimsPrincipal).Identities[0].BootstrapToken;

元のセキュリティ トークンを取得したら、それを Authorize ヘッダーとして Web API の呼び出しに添付できます。一般に、これは Bearer トークンとしてアタッチされます。これは、ヘッダー値の先頭に「bearer」という単語を追加することを示す単なる派手な方法です。トークンをアタッチするには、次のようにします。

WebClient request = new WebClient();
request.Headers.Add("Authorization","bearer " + tokenAsString); 

注:一部のフレームワークは転送中に XML をマングルするため、一般的には、生の文字列を添付するのではなく、転送中にトークン値を暗号化または base64 エンコードします。特に XML の場合はそうです。

トークンを文字列に変換するには、から派生したクラスを使用する必要 SecurityTokenHandlerがあります。いくつかの標準トークン タイプを処理するための標準フレームワーク アセンブリには、これらのクラスが多数含まれています。REST サービスでは、JSON Web トークンが一般的な形式であり、そのハンドラーを含む NuGet パッケージがここにあります

https://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/

他のトークン タイプを使用している場合は、独自のハンドラーを作成するか (実際には難しくありません)、Web で検索してみてください。

.Net 4.5 では、SecurityTokenHandlerクラスにはWriteToken(SecurityToken)トークンを文字列として返すメソッドがあります。以前のバージョンの WIF では、WriteToken の XML バージョンのみがサポートされていました。

サーバー側で REST サービスに SecurityTokenHandler を使用する方法を示すサンプルがいくつかあります。良い例はここにあります

http://code.msdn.microsoft.com/AAL-Native-App-to-REST-de57f2cc/view/Discussions#content

関連するすべてのコードは、global.asax.cs ファイルに含まれています。

于 2013-06-24T16:11:24.427 に答える
1

クライアントが認証されていない場合、Web Api サービスは 401 Unauthorized 応答を返す必要があります。

認証を求めて新しいトークンを取得するのは、責任を持ってクライアントになります。WWW-authenticate ヘッダーのログイン フォームへのリンクを返す必要があります。

このビデオが役立つかもしれません - ASP.NET Web API の保護http://vimeo.com/43603474

于 2013-06-24T15:01:41.870 に答える