将IP-STS JWT令牌交换为ACS JWT令牌



我有一个azure ACS服务,它信任IP-STS
对于活动场景,我首先使用用户名和密码凭据从IP-STS获得JWT令牌。有Oauth2端点,一切都很好。有可能用这个IP-STS代币"交换"我的azure ACS发行的JWT代币吗?如果是这样的话,是否有这样的代码示例。(更糟糕的是,我所有的代码都是JavaScript(实际上是TypeScript),但这并不重要)。

更新:我正在使用ACSOAuth2草案13端点处理您的提示
我按如下方式进行:我请求我的自定义STS(ThinkTecture STS)为"ACS OAuth2 draft 13 endpoint"领域提供JWT令牌。这需要oAuth客户端id和secret,它们在TTSTS中是全局的,我认为它们是不相关的。在TTSTS管理中,我为这个领域配置了一个对称密钥:key1。我收到3件JWT代币。令牌上的签名确实是用key1创建的。然后,我将此令牌与客户端id和来自指定的服务标识和参数的机密一起传递给ACS

var form = new FormUrlEncodedContent(new Dictionary<string, string>
{
{ "grant_type", "http://oauth.net/grant_type/jwt/1.0/bearer" },
{ "assertion", rawtoken (the header dot body dot signature form TT STS },
{ "scope", "http://localhost"}
});

不幸的是,我现在{"error":"invalid_client","errordescription":"ACS50027:JWT令牌无效。\r\n陷阱ID:b107cda5-393b-4b50-b14a-ebaa0ac41913\r\n时间戳:2012-12-05 08:58:10Z"}

我知道JWT是测试版,因此ACS50027还没有文档。困难的是没有已知的方法来调试它。谢谢你的帮助。

这肯定是可能的,但我不认为任何现有的ACS样本都能做到这一点,所以你有点处于未知的领域。

我建议的方法是使用ACSOAuth2草案13端点(如本示例所示,但使用JWT代替SAML,使用IdP代替服务标识)。请求类似于:

grant_type=http://oauth.net/grant_type/jwt/1.0/bearer&断言=(JWT)&scope=(RP领域)。

您需要JWT的颁发者与您注册的身份提供商相匹配,以及相关的签名密钥,再加上必要时传递或更改任何声明的规则,以及具有JWT令牌类型的RP。

好的,我终于找到了一种方法。你的暗示对成功至关重要。(非常)棘手的部分是IP-STS使用对称密钥对JWT令牌进行签名。我必须以编程方式(使用odataapi)在Identity提供程序下的ACS后台插入此密钥。(managament控制台不会在任何地方显示此键)一切都很好。唯一的问题是ACS从原始令牌中复制受众("aud"),而我为不同的受众("scope")请求令牌。有什么想法吗?

没有,您不能在ACS中交换令牌。唯一可行的方法是,如果您能够在ACS中将IP-STS注册为IdP(如果您的IP-STS支持WS-TRUST协议,您将能够这样做)。这会让你陷入被动局面。

唯一可能的活动场景方式是使用带有服务标识的用户名/密码身份验证直接从ACS获取JWT令牌。在ACS中管理好服务标识并不像管理ASP.NET成员身份提供程序那样,但它有一个管理API。

使用服务标识进行身份验证的可能方法有密码、对称密钥、X.509证书。因此,如果您扭曲了足够多的原始IP-STS,在其JWT令牌中为您提供一个对称密钥作为声明,您将能够使用该对称密钥的服务身份验证从ACS获得JWT令牌。

但是,如果你已经有了JWT代币,为什么还需要ACS的另一个呢?

更新

嗯,索赔转换是"被动"模式下的唯一选项。对于活动模式,唯一的方法(我知道)是使用服务标识,因此没有声明转换。

Passive的问题是,由于安全原因,ACS将创建一个隐藏的POST表单,以便将转换后的令牌POST提交给您的依赖方应用程序(RP)。因此,没有办法主动获得被动行为。你可以做的只是为了试用,但由于隐藏形式的被动POST而失败的是:如果你愿意进行实验(我还没有测试,我完全不知道结果),你可以尝试模拟提供原始JWT令牌的wsignin1.0操作。您可以查看WS-Federation被动请求者配置文件,第3.1节介绍如何构造登录请求。您还可以使用Fiddler来完全跟踪被动场景中的事件链。您将尝试重建的是从注册的IdP返回ACS的wsignin1.0请求。

在某个时刻,您将得到结果HTML,其中包含一个FORM元素。该表单将有两个隐藏字段-值为wsignin1.0wa和包含URL编码的<t:RequestSecurityTokenResponse xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">....wresult。这就是您想要的。

如果您成功地从您的IdP重新创建了到ACS的原始登录请求,那么这将起作用。

相关内容

  • 没有找到相关文章

最新更新