如何(可以)为Auth0单页面应用程序配置Azure API管理

时间:2017-12-14 09:56:07

标签: single-page-application auth0 azure-api-management

场景:Auth0单页面应用程序客户端。 .NET Web API和Angular SPA都配置为使用此客户端。效果很好。

我想将Azure API Management添加为API前面的图层。已经在管理门户中设置了API,更新了SPA来调用API,测试了来自SPA的调用,效果很好。

现在,我想使用正确的安全设置配置API Management Portal,以便人们可以从Developer Portal调用API调用。我已将此[https://auth0.com/docs/integrations/azure-api-management/configure-azure]用作指南。

我在哪里:

在Developer门户中,我可以选择Authorization Code作为Auth类型,使用Auth0成功登录并获取Bearer令牌。但是,对API的调用总是返回401.我认为这是因为我对如何正确设置感到困惑。据我了解:

  • 我按照说明操作并在Auth0中设置了一个新的API客户端,但如果是这样的话,那么肯定它无法正常工作,因为从一个客户端生成的令牌不是&#39对我的SPA客户端工作? (或者有什么我需要改变以使其有效)

  • 或者,我应该如何配置Azure API Management以使用SPA应用程序。 (这将是我的首选方法,在Auth0中有两个客户端似乎很混乱')。但是,我不需要观众#39;我的授权端点URL中的值?我该怎么做?

如果有人这样做了,我会非常感谢这里的一些指导。

2 个答案:

答案 0 :(得分:2)

好吧,我不认为我会很快回来回答我自己的问题。原因主要在于我对这些东西的普遍无知,再加上尝试举例并将它们融合在一起以满足我的需要。发布此信息可以帮助那些发现自己的人。

我没有在Auth0中使用单一应用程序客户端并使其与Azure API管理一起使用,而是决定采用其他方式,并使非交互式客户端与我的SPA一起使用。这最终“感觉”更正确:API正在保证,我应该让API管理门户工作,然后更改我的SPA以使用它。

一旦我记得/意识到我需要在API中更新我的受众以匹配Auth0中客户端中设置的受众,那么管理门户就开始工作了。让SPA使用API​​然后成为一个挑战:我试图找出如何更改auth0角度代码以传递受众与API发送的匹配,但它继续发送ClientID。 (顺便说一下,通过使用https://jwt.io/来解密持有人令牌并弄清楚发生了什么,找到所有这一切变得更容易了 - 查看受众的'aud'值。

最后,我更改了我的API,在new JwtBearerAuthenticationOptions对象中,TokenValidationParameters对象(类型TokenValidationParameters)具有属性ValidAudiences(是的,有也是一个ValidAudience属性,令人困惑,可以占用多个受众。所以,我添加了我的ClientID。

我接下来改变的唯一另一件事(可能是我特定的,不确定)是我必须为我的非交互式客户端更改Auth0中的 JsonWebToken签名算法值(高级设置) ,oAuth tab)从HS256到RS256。

完成所有这些工作后,现在请求来自API Management Portal和我的SPA工作。

很想知道这是否是“正确”的做法,或者我在这里做过任何被认为危险的事情。

答案 1 :(得分:1)

由于您可以使用.Net API进行jwt的验证,因此实际上仅需进行少量更改即可使用Azure API Management。

在API管理中, 在一个操作(或所有操作)上创建validate-jwt入站策略 将audiencesissuers设置为与.NET Web api相同。 (如果您还不知道,可以在Auth0门户中检查值)

由于auth0默认情况下使用RS256,因此此时缺少的重要字段是Open ID URLs。该URL可以在您的Auth0门户中找到:应用程序->单页应用程序->设置->向下滚动,Show Advanced Settings->端点。然后复制OpenID Configuration

Here's the reference,了解API管理对JWT令牌的要求

optional reading