场景:Auth0 单页应用程序客户端。 .NET Web API 和 Angular SPA 均配置为使用此客户端。效果很好。
我想将 Azure API 管理添加为 API 前面的一层。已在管理门户中设置 API,更新 SPA 来调用 API,测试了 SPA 的调用,效果很好。
现在,我想使用正确的安全设置配置 API 管理门户,以便人们可以从开发人员门户调用 API 调用。我用过这个[https://auth0.com/docs/integrations/azure-api-management/configure-azure]作为指导。
我在哪里:
在开发者门户中,我可以选择授权代码作为身份验证类型,使用 Auth0 完成成功的登录过程并获取不记名 token 。然而,对 API 的调用总是返回 401。我认为这是因为我对如何正确设置它感到困惑。据我了解:
我要么按照说明在 Auth0 中设置一个新的 API 客户端,但如果是这样的话,那么它肯定不会起作用,因为从一个客户端生成的 token 不会对我的 SPA 客户端起作用? (或者我需要更改什么才能使其正常工作)
或者,我应该如何配置 Azure API 管理以与 SPA 应用程序配合使用。 (这将是我的首选方法,Auth0 中有两个客户端似乎“困惑”)。但是,我的授权端点 URL 中不需要“受众”值吗?我怎样才能得到它?
如果有人这样做过,非常感谢这里的一些指导。
最佳答案
嗯,我没想到我会这么快回来回答我自己的问题。原因主要源于我对这些东西的普遍无知,再加上我试图举一些例子并将它们融合在一起以满足我的需要。发布此内容是为了帮助其他发现自己在这里的人。
我决定采用另一种方式,让非交互式客户端与我的 SPA 配合使用,而不是采用 Auth0 中的单一应用程序客户端并使其与 Azure API 管理配合使用。这最终“感觉”更正确:API 是我所保护的,我应该让 API 管理门户正常工作,然后更改我的 SPA 以使用它。
一旦我记得/意识到我需要更新 API 中的受众以匹配 Auth0 中客户端中设置的受众,管理门户就开始工作。然后,让 SPA 与 API 配合使用就成了一项挑战:我试图找出如何更改 auth0 角度代码以传递受众以匹配 API 发送的受众,但它一直在发送 ClientID。 (顺便说一句,通过使用 https://jwt.io/ 解密承载 token 并弄清楚发生了什么,可以更轻松地找出所有问题 - 查看观众的“aud”值。
最后,我更改了我的API,在新的JwtBearerAuthenticationOptions
对象中,TokenValidationParameters
对象(类型为TokenValidationParameters
)有一个属性ValidAudiences(是的,还有一个 ValidAudience 属性,令人困惑),它可以容纳多个受众。因此,我将我的 ClientID 添加到其中。
我随后更改的唯一一件事(这可能是我特有的,不确定)是我必须为我的非交互式客户端更改 Auth0 中的 JsonWebToken 签名算法 值(高级设置,oAuth 选项卡)从 HS256 到 RS256。
完成所有这些后,现在来自 API 管理门户和我的 SPA 的请求开始工作。
很想知道这是否是“正确”的做法,或者我是否在这里做了任何被认为危险的事情。
关于single-page-application - 如何(您能)为 Auth0 单页应用程序配置 Azure API 管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47810428/