0

当我开始阅读 ACS 2.0 文档时,我意识到 ACS 集成了基于声明的身份验证。所以如果我不想在我的应用程序中使用声明,我应该如何获取 SWT 或 JSON 格式的数据?

有没有人有一个如何实现这一目标的例子?

4

2 回答 2

0

您配置信赖方的令牌格式以指定 ACS 颁发的令牌格式。我建议您查看ACS 中支持的协议,因为如果您计划将您的应用程序(依赖方)与 ACS 集成,您将利用这些协议之一。ACS 中支持的令牌格式涵盖了令牌格式的差异,并帮助您确定哪个是您的依赖方的最佳选择。

无论您选择发布何种令牌格式(SAML、JWT、SWT),您的依赖方都将负责验证 Web 令牌并在做出授权决策时提取声明的声明。

于 2013-03-11T17:01:14.623 回答
0

最简单的解决方案:切换 ACS 以使用 SWT 令牌,配置您的应用程序以保存引导令牌并以您的方式使用它们 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)));
    }
于 2013-03-12T05:48:56.850 回答