【问题标题】:Requesting token from ACS endpoint in exchange of identity Provider token从 ACS 端点请求令牌以交换身份提供者令牌
【发布时间】:2013-07-15 20:13:08
【问题描述】:

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

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

ErrorCode:400:SubCode:T1019:Detail: Inavlid SWT 令牌。这 wrap_assertion 值不是 SWT 断言

注意:

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

如果我做错了什么,请纠正我,是的,我在谷歌上搜索了很多,但没有找到解决办法!

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

【问题讨论】:

  • 您能否提供您所尝试的具体代码 - 即具体代码、具体请求和响应(完全转储省略敏感数据) - 您如何获得 FB 令牌以及如何使用它来请求 ACS令牌。还有确切的 ACS 配置(IdP + RP + 规则组)。
  • 我已经从 facebook graph api explorer 复制了我的 accessToken,并将其与 Issuer 和 HMACSHA256 一起附加到“WRAPv0.9”上的 POST 请求中。此外,我的 ACS 配置为按原样转换 accessToken 声明,IdP 已在 RelyingParty(localhost) 代码下设置为 Facebook,与刚刚添加的官方教程中的 builder.Append(HttpUtility.UrlEncode("facebook.com/claims/AccessToken=")); builder.Append(HttpUtility.UrlEncode(accessToken));
  • 这种情况对我来说没有多大意义。通常,ACS 的 Facebook 支持涉及用户登录,但我不清楚它如何应用于此 ServiceIdentity 案例。您希望 ACS 对访问令牌做什么?
  • @OrenMelzer 是的,你是对的。服务身份案例与我所质疑的场景无关,我已经提到要明确 ACS 已配置并且从 ACS 端点请求令牌的一种方法正在工作。这样就缩小了在客户端生成 SWT 令牌的问题。

标签: authentication azure claims-based-identity acs


【解决方案1】:

这里有两件事会失败。

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

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

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

【讨论】:

  • Faceboo 令牌是一个不透明的字符串,它根本没有加密。它用作调用 Facebook API 的不记名令牌。
  • 我想要实现的只是在我的移动应用程序上对 facebook 上的用户进行身份验证,然后为经过身份验证的用户请求 ACS 令牌,以进一步向我的安全 Web API 发出请求。我尝试以上述方式这样做,但没有成功。知道怎么做吗?
【解决方案2】:

您的问题是,您似乎是直接与 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 不支持您自己获取访问令牌的模型,这似乎是您想要做的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 2017-04-17
    • 2018-04-13
    • 2016-05-08
    • 2017-10-28
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多