基本原理
在我们的 WildFly 发行版中,我们使用 Keycloak 进行身份管理和身份验证;它全部整合到一个服务器中,包括所有 apiman 的组件和 Keycloak。但是,Keycloak 无法在 Tomcat 上运行,因此默认情况下,我们的 Tomcat 快速入门仅使用 Tomcat 的内置身份验证机制(您可以将其配置为使用 LDAP、JDBC 等)。
所以,如果你想要Keycloak加apiman,你需要做一些额外的工作。但是,这带来了很多功能,因此对于实际部署来说可能是值得的。
请记住,这描述起来有点冗长,但实际上实现起来相当快。
自然,仅使用 WildFly 一体机可能会少一些麻烦,尤其是对于快速测试而言:-)。
我很快就会把它添加到 apiman 文档中。
在 Tomcat 上使用 Keycloak IDM 和 apiman
让 Keycloak 运行
下载 Keycloak并运行。创建您的管理用户并登录。
导入 apiman Keycloak 领域。这只是一个演示演练,您需要重新生成用于生产的密钥和机密:-)。
对于客户端apiman
和,将您的有效重定向 URIapimanui
修改为您的 apiman 实例的绝对 URL(例如)。http://myapiman.url:8080/apimanui/*
准备Tomcat
Keycloak 文档中提供了通用说明,但我将努力提供更专业的配置信息。
修改apiman
提取apiman.war
, apimanui.war
,apiman-gateway-api.war
并添加以下内容:
在apiman.war
:
<Context path="/apiman">
<Valve className="org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve"/>
</Context>
在apimanui.war
<Context path="/apimanui">
<Valve className="org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve"/>
</Context>
在apiman-gateway-api.war
<Context path="/apiman-gateway-api">
<Valve className="org.keycloak.adapters.tomcat.KeycloakAuthenticatorValve"/>
</Context>
在apiman.war
:
{
"realm": "apiman",
"resource": "apiman",
"realm-public-key": "<YOUR REALM'S PUBLIC KEY>",
"auth-server-url": "http://localhost:9080/auth",
"ssl-required": "none",
"use-resource-role-mappings": false,
"enable-cors": true,
"cors-max-age": 1000,
"cors-allowed-methods": "POST, PUT, DELETE, GET",
"bearer-only": false,
"enable-basic-auth": true,
"expose-token": true,
"credentials" : {
"secret" : "<APIMAN SECRET HERE, IF ANY>"
},
"connection-pool-size": 20,
"principal-attribute": "preferred_username"
}
在apimanui.war
,配置如上,但有:
{
"realm": "apiman",
"resource": "apimanui",
"realm-public-key": "<YOUR REALM'S PUBLIC KEY>",
...
"credentials" : {
"secret" : "<APIMANUI SECRET HERE, IF ANY>"
},
"principal-attribute": "preferred_username"
}
在apiman-gateway-api.war
,配置如上,但有:
{
"realm": "apiman",
"resource": "apiman-gateway-api",
"realm-public-key": "<YOUR REALM'S PUBLIC KEY>",
...
"credentials" : {
"secret" : "<APIMAN-GATEWAY-API SECRET HERE, IF ANY>"
},
"principal-attribute": "preferred_username"
}
对于以上所有内容,将该login-config
部分替换为:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>apiman</realm-name>
</login-config>
其他问题
您可能想要复制主题(或制作自己的主题)。这很容易,但超出了此响应的范围。