ACS 2.0ドキュメントを読み始めたとき、ACSはクレームベースの認証と統合されていることに気付きました。したがって、アプリケーションでクレームを使用したくない場合、SWTまたはJSON形式でデータを取得するにはどうすればよいですか?
誰かがこれを達成する方法の例を持っていますか?
証明書利用者のトークン形式を設定して、ACS によって発行されるトークンの形式を指定します。アプリケーション (証明書利用者) と ACS の統合を計画している場合は、これらのプロトコルのいずれかを利用するため、ACS でサポートされているプロトコルを確認することをお勧めします。ACS でサポートされるトークン形式では、トークン形式の違いについて説明し、証明書利用者にとって最適な選択肢を決定するのに役立ちます。
発行することを選択したトークン形式 (SAML、JWT、SWT) に関係なく、証明書利用者は、承認の決定を行う際に Web トークンを検証し、アサートされたクレームを抽出する責任があります。
最も簡単な解決策: SWT トークンを使用するように ACS を切り替え、ブートストラップ トークンを保存するようにアプリを構成し、web.config でそれらを使用します。
<system.identityModel>
<identityConfiguration saveBootstrapContext="true">
応用:
var claimIdentity = Thread.CurrentPrincipal.Identity as ClaimsIdentity;
if (claimIdentity == null)
{
return;
}
BootstrapContext bootstrapContext = claimIdentity.BootstrapContext as BootstrapContext;
SecurityToken token = null;
//you must configure SWT token handler in web.config or set up 'em manually like
SecurityTokenHandlerCollection handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
//here is a bug in 4.5 cause a bootstrapContext.SecurityToken disappear sometimes.
//http://blogs.msdn.com/b/vbertocci/archive/2012/11/30/using-the-bootstrapcontext-property-in-net-4-5.aspx
if (bootstrapContext.SecurityToken != null)
{
token = bootstrapContext.SecurityToken;
}
else if (!string.IsNullOrEmpty(bootstrapContext.Token))
{
token = handlers.ReadToken(new XmlTextReader(new StringReader(bootstrapContext.Token)));
}