如何在Gentics Mesh中实施Okta身份验证?

时间:2019-09-01 16:01:46

标签: okta okta-api gentics-mesh

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。

2 个答案:

答案 0 :(得分:1)

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

Gentics Mesh现在将充当资源服务器的角色。只要已添加OAuth服务器的公钥,它就可以接受任何JWT。

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

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

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

答案 1 :(得分:0)

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

有一个使用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