【问题标题】:How do I configure clients at Authentication Server for SPA - REST architecture with validation?如何在 SPA 的身份验证服务器上配置客户端 - 带有验证的 REST 架构?
【发布时间】:2020-01-29 10:03:09
【问题描述】:

我知道这个话题已经有很多话题了,而且已经有很多票了。但是在查看了数百张票和页面后,我没有找到必要的架构信息。

我计划的是一个简单的 SPA (Angular) - REST 后端(单独的 .Net Core 2.1 WebApi)设置。我有 Keycloak 通过 OpenId Connect 提供身份验证。我正在使用 Angular 的 OpenId 包与 Keycloak 通信,以获取 id 和访问令牌。

我想要的是Angular客户端只能访问身份令牌并且信息是Authenticated/LoggedIn。 Angular 前端不应该对访问令牌感兴趣,对吧?所以我也可以加密访问令牌以保护信息?

然后,我将加密的访问令牌传递给我的 REST-Backend(可以访问应用程序机密),在那里我可以验证加密签名、令牌的加密主体以及可能在身份验证服务器上自省令牌以验证和授予访问权限资源?

但是为什么这么多文章指出 Keycloak 机密客户端(具有应用程序机密)不是 SPA 设置的正确方法? SPA 本身不需要秘密,只有后端需要,还是不需要?

如果有任何信息可以帮助我填补剩余的空白,我将不胜感激。

【问题讨论】:

    标签: angular authentication asp.net-core-webapi openid-connect keycloak


    【解决方案1】:

    Angular 前端不应该对访问令牌感兴趣,对吧?

    是的,您的客户端只需要验证和解码 ID 令牌即可获取用户的个人资料信息。访问令牌是访问受保护的资源,无需在客户端应用中验证访问令牌。

    所以我也可以加密访问令牌以保护信息?

    不确定我是否理解您的情况。 JWT 可以被签名、加密或两者兼有,由令牌服务控制。当您的后端 web api 收到访问令牌时,它将验证访问令牌,并使用身份提供者发布的公钥验证签名。

    但是为什么有这么多文章指出 Keycloak 机密客户端(具有应用程序机密)不是 SPA 设置的正确方法?

    现在建议使用授权代码授予流程和代码交换证明密钥 (PKCE) 来保护 Angular 应用程序。它比在 spa 应用程序中保密客户更安全。我对 Keycloak 不熟悉,但是您可以点击here 获取有关如何在 Angular 应用中使用 Keycloak 作为 IDP 使用代码流 + PKCE 的文章。

    【讨论】:

    • 您好@NanYu,感谢您的回答。这已经对我有一点帮助了。我的 scanario 正在一个 Intranet/私有网络中运行,该网络目前不使用 https。这就是我想加密访问令牌的原因。 Id token 只有基本信息(用户名)。这是否意味着具有应用程序机密的身份验证服务器上的客户端通常不适合授权代码流 (PKCE)?我会看看你关于这个话题的链接
    • Keycloak 支持授权码流 (PKCE) 。因此,您可以在 angular app 中使用授权码流 (PKCE)。你可以加密访问令牌,这取决于你。
    猜你喜欢
    • 1970-01-01
    • 2011-11-04
    • 2012-08-28
    • 1970-01-01
    • 2021-06-05
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    相关资源
    最近更新 更多