single-page-application - 如何(您能)为 Auth0 单页应用程序配置 Azure API 管理

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

场景: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/

相关文章:

auth0 - TypeError,在开发环境中为 'digest'(未定义)

azure - 如果在 azure 开发者门户中输入错误的用户名,则不会显示错误消息

reactjs - 多选轮廓 varant 属性不起作用

angularjs - 排队 GPT 命令中的异常类型错误 : Cannot read property 'addService' of null

knockout.js - 在 Durandal/SPA 应用程序中配置 Knockout 验证

auth0 - 如何在auth0中使用postman通过用户名和密码登录以获取token_id和access_token?

javascript - SPA 中用户数据存储在哪里

auth0 - 在 Auth0 中使用 'localhost' 作为回调 URL 是否不安全?

azure - API管理中将特定API添加到多个产品中,希望在API级别设置 'Subscription required'

azure - 有没有办法在 Azure API Manager 开发人员门户中以编程方式登录(登录)用户?