0

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

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

错误代码:400:子代码:T1019:详细信息:无效的 SWT 令牌。wrap_assertion 值不是 SWT 断言

笔记:

  1. 我已经验证了 Issuer= [编辑身份提供者页面下的领域]
  2. 签名密钥与令牌签名密钥下所示的对称密钥相同
  3. 我还将 facebook accesstoken 作为我的 SWT 令牌中的声明包装到 ACS 端点,以便获得 ACS 令牌作为回报。

如果我做错了什么,请纠正我,是的,我对此进行了很多搜索,但找不到任何解决方法!

PS:我也尝试过使用我的服务标识请求密码令牌,它工作正常。

4

2 回答 2

1

这里有两件事会失败。

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

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

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

于 2013-07-15T21:41:46.660 回答
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 调用。

ACS 不支持您自己获取访问令牌的模型,这似乎是您想要做的。

于 2013-07-19T21:52:00.840 回答