从ACS端点请求令牌以交换身份提供者令牌

时间:2013-07-15 20:13:08

标签: authentication azure claims-based-identity acs

我按照官方教程(http://msdn.microsoft.com/en-us/library/hh674475)通过SWT令牌请求交换身份提供商(Facebook)令牌请求ACS令牌。

我尝试了所有可能的事情,我无法摆脱这个错误

  

ErrorCode:400:SubCode:T1019:Detail:Inavlid SWT token。该   wrap_assertion值不是SWT断言

注意:

  1. 我已经验证了Issuer = [编辑身份提供商页面下的领域]
  2. 签名密钥与令牌签名密钥
  3. 下显示的密钥相同
  4. 我还将facebook accesstoken包装为我的SWT令牌中的声明到ACS端点,以便获得ACS令牌。
  5. 如果我做错了事,请纠正我,是的,我搜索了很多关于这一点,但没有找到解决办法!

    P.S:我也尝试过使用我的服务标识的密码令牌请求,它运行正常。

2 个答案:

答案 0 :(得分:1)

这里有两件事情会失败。

首先,我怀疑Facebook会为您提供有效的SWT令牌。他们只给出了一个被称为“令牌”的字符串。而且这个东西不是一个可以在其他STS-es(如ACS)中用作SWT令牌的有效SWT令牌(我可能在这里错了,因为我不是FB的专家,但由于这些错误,它非常可能我是对的)。因此,如果来自FB的令牌不是有效的SWT令牌,那么您的故事将在此处结束。

接下来就是 - 你正在为你生成SWT令牌。这意味着您现在正在签署令牌。但是你说你需要从Facebook转换一个令牌。那么,你无法用Facebook的签名密钥签署令牌!您正在使用ACS的密钥唱出令牌,这使其无效,因为您将其作为Facebook的令牌呈现。

简而言之 - 您无法以您尝试的方式使用Facebook Graph API令牌。请描述您要解决的更广泛的问题,以便我们提供足够的帮助。

答案 1 :(得分:0)

您的问题是,您似乎直接与Facebook打交道,然后为ACS提供访问令牌。这不是Facebook的ACS模式。基本模型是ACS首先处理Facebook,而不是你的应用程序。这种方式的工作原理是:

  1. 最终用户从Facebook请求访问令牌。这可以直接通过ACS(例如,通过发出WS-Federation登录请求)或ACS指定的URL(通过IdentityProviders.js)发生。
  2. 用户登录Facebook。
  3. 授权码发送给ACS。
  4. ACS交换访问令牌的身份验证码并检索一些用户数据。这是通过规则运行,打包到令牌中,并发送到您的RP​​。此令牌中的一个声明是访问令牌,然后您的RP可以使用它进行进一步的Facebook呼叫。
  5. ACS不支持您自己获取访问令牌的模型,这似乎就是您要做的事情。