あなたの説明から、委任された 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 ファイルに含まれています。