场景: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中的值?我该怎么做?
如果有人这样做了,我会非常感谢这里的一些指导。
答案 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
入站策略
将audiences
和issuers
设置为与.NET Web api相同。 (如果您还不知道,可以在Auth0门户中检查值)
由于auth0默认情况下使用RS256,因此此时缺少的重要字段是Open ID URLs
。该URL可以在您的Auth0门户中找到:应用程序->单页应用程序->设置->向下滚动,Show Advanced Settings
->端点。然后复制OpenID Configuration
Here's the reference,了解API管理对JWT令牌的要求