【问题标题】:How would I implement Okta Authentication in Gentics Mesh?我将如何在 Gentics Mesh 中实现 Okta 身份验证?
【发布时间】:2020-01-04 22:25:09
【问题描述】:

Gentics Mesh 支持内置 Keycloak,但我想改用 Okta。

最佳做法是什么?

是否需要修改 Mesh 源代码?

或者我应该在中间件层处理身份验证?

或者我可以实现 AuthServicePlugin 来验证来自 Okta 的令牌吗?
https://github.com/gentics/mesh/blob/dev/plugin-api/src/main/java/com/gentics/mesh/plugin/auth/AuthServicePlugin.java

更新
我尝试在 mesh.yml 配置中使用我的 Okta 服务器,但抛出异常。
这是我的 Okta 服务的 OIDC 网址 -
https://{yourOktaDomain}/oauth2/v1/authorize

不幸的是,OAuth2 实现似乎是特定于 Keycloak 的 -

com.gentics.mesh.core.rest.error.GenericRestException: 500 Internal Server Error oauth_config_error at com.gentics.mesh.core.rest.error.Errors.error(Errors.java:124) ... Caused by: java.lang.RuntimeException: Error while loading realm info. Got code {404} at com.gentics.mesh.auth.MeshOAuth2ServiceImpl.fetchPublicRealmInfo(MeshOAuth2ServiceImpl.java:451)

看起来它正在拼凑一个不适用于 Okta 的网址。
https://github.com/gentics/mesh/blob/f85dac8bf954248a6556323d792e6b849fb1d593/services/keycloak-auth/src/main/java/com/gentics/mesh/auth/MeshOAuth2ServiceImpl.java#L434

如果我没记错的话,可以更改实现 [MeshOAuth2ServiceImpl] 以支持任何 OIDC。

【问题讨论】:

    标签: okta okta-api gentics-mesh


    【解决方案1】:

    最近更新了身份验证机制。

    Gentics Mesh 现在将扮演资源服务器的角色。只要添加了来自 OAuth 服务器的公钥,它就可以接受任何 JWT。

    插件 API 已更新,可支持 oauth 用户和网格之间的自定义映射。例如,这允许您将多个 oauth2 用户映射到一个包含所需角色/组的网格用户。您还可以创建一个 1:1 映射,其中每个 oauth2 用户都将添加到 Mesh。

    OAuth 服务器的公钥可以通过插件 API 加载或硬编码在 public-keys.json 文件中。

    您可以在此处阅读有关此主题的更多信息: https://getmesh.io/docs/authentication/#_oauth2_oidc

    【讨论】:

    • 感谢 @Jotschi - 我非常感谢您在 Mesh 上的辛勤工作,以及在此处和 GitHub 上的响应能力。我已经决定将 Mesh 作为我当前两个项目的 CMS。另外,如果有任何问题我可以提供帮助,请告诉我!
    【解决方案2】:

    根据遗传学网格文档,OAuth2 is supported out of the box。我会使用 Okta 中的 OpenID Connect 功能来获取 JWT 并在遗传学网格中使用它。

    有一个将 OIDC 与 KeyCloak 结合使用的配置示例,但您可以将 Okta 端点替换为提供的 KeyCloak 端点。

    security:
      oauth2:
        enabled: true
        config:
          realm: "master"
          authServerUrl: "http://localhost:3000/auth" # Okta endpoint here
          sslRequired: "external"
          resource: "mesh"
          credentials:
            secret: "9b65c378-5b4c-4e25-b5a1-a53a381b5fb4" # application secret here
          confidentialPort: 0
    

    另外根据文档,如果您需要角色映射,则必须create an AuthServicePlugin

    【讨论】:

    • 谢谢 Paul,很遗憾,我不认为 Mesh 正在实施 OIDC - 我已经更新了我的问题。
    • 这太糟糕了。我猜他们的文档需要更新。
    猜你喜欢
    • 2021-06-07
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2021-11-17
    • 2018-09-29
    • 2017-10-26
    相关资源
    最近更新 更多