私の文脈:
- .Net RESTful Web サービス
- クライアント (混合プラットフォーム、テクノロジー、lib 機能) が SAML トークンを取得しました
- REST サービスで認証/認可用のトークンを受け入れようとしています
- HTTP Authorization / X-Authorization ヘッダー内
- クエリ パラメータとして
- 後で SWT もサポートしますが、SAML トークンを取得する必要があります
詳細:
文字列に SAML トークンがあります。
<saml:Assertion xmlns:saml="..." ...> ..etc... </>
HttpModule では、これを ClaimsPrincipal に変換して、サービスが通常の Thread.CurrentPrincipal を IClaimsPrincipal として実行できるようにします。
いくつかの魅力的なページ/ブログ/その他を見つけました...参考になりました:
- HTTP Authorization ヘッダーでトークンを渡すための Cibrax のアイデア
- Dominick Baier 氏は、SWT と同様のことについて、SAML で同じことを簡単に行うことができると述べています。
私は文字通りSAMLトークンをClaimsPrincipalに変換しようとして立ち往生しています(SecurityTokenの中間ステップまたは直接... どちらの方法でも満足しています)。Cibrax のアイデアのサンプル コードでは、重要な検証と逆シリアル化の手順に次のコードを使用しています。
SecurityTokenSerializer securityTokenSerializer
= new SecurityTokenSerializerAdapter(
FederatedAuthentication.SecurityTokenHandlers,
MessageSecurityVersion.Default.SecurityVersion,
false, new SamlSerializer(), null, null);
SecurityToken theToken
= WSFederationAuthenticationModule.GetSecurityToken(
theSamlTokenInStringForm, securityTokenSerializer);
私がぶつかった壁は、WIF の RTM バージョンが GetSecurityToken のこのオーバーロードを公開していないことです...それは公開するだけです:
WSFederationAuthenticationModule fam = new WSFederationAuthenticationModule();
SecurityToken theToken = fam.GetSecurityToken(HttpRequest theRequest);
SecurityToken theToken = fam.GetSecurityToken(SignInResponseMessage message);
立ち往生するのを手伝ってくれてありがとう!
タイラー