我们正在Apigee Edge和后端服务器(使用Kubernetes中的NginxIngress公开)之间使用双向TLS通信。但是,我们希望将Apigee Edge与密钥斗篷集成在一起以保护Apigee Endpoint端点(例如https://org-name-env.apigee.net/path)。
我是Apigee和Keycloack的新手,经过大量搜索后,我发布了此问题,以获取有关在Apigee Edge中使用Keycloak的正确文档。任何文章,社区答案,建议,指导,文档或POC都会有帮助。
答案 0 :(得分:1)
Apigee社区是一个问这些类型问题的好地方https://community.apigee.com/
我不确定此职位的整体情况,但我相信Apigee Edge在南端分支上采用2路TLS的方法不能直接扩展为支持像KeyCloak这样的外部密钥管理服务。 Apigee trustStore和“目标端点”配置在很大程度上是固定的。就是说,在Apigee政策中,您不必使用Apigee的目标端点概念作为流量的最终目的地。由于Edge策略定义,其他JS等具有一些额外的复杂性,您可以调出KeyCloak的admin API,然后使用响应对象来构造自己的对后端服务的南向2路TLS安全调用。 / p>
答案 1 :(得分:1)
下面是我创建的用于进行设置的文档,并为其创建了一个markdown文档,其外观如下所示:
1使用KeyCloak生成JWT令牌Realm Settings
中找到。请参阅this image以获取公共密钥。 -----BEGIN PUBLIC KEY-----
并将-----END PUBLIC KEY-----
附加到此复制的公钥中,以在Apigee配置和jwt.io上使用它。有效和可用的公共密钥如下所示:-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhAj9OCZd0XjzOIad2VbUPSMoVK1X8hdD2Ad+jUXCzhZJf0RaN6B+79AW5jSgceAgyAtLXiBayLlaqSjZM6oyti9gc2M2BXzoDKLye+Tgpftd72Zreb4HpwKGpVrJ3H3Ip5DNLSD4a1ovAJ6Sahjb8z34T8c1OCnf5j70Y7i9t3y/j076XIUU4vWpAhI9LRAOkSLqDUE5L/ZdPmwTgK91Dy1fxUQ4d02Ly4MTwV2+4OaEHhIfDSvakLBeg4jLGOSxLY0y38DocYzMXe0exJXkLxqHKMznpgGrbps0TPfSK0c3q2PxQLczCD3n63HxbN8U9FPyGeMrz59PPpkwIDAQAB
-----END PUBLIC KEY-----
请参阅medium.com上的this帖子,以获取有关使用KeyCloak生成JWT的更多详细信息。
2在Apigee中使用VerifyJWT策略<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>Assign Message-1</DisplayName>
<Properties/>
<AssignVariable>
<Name>public.key</Name>
<Value>-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhAj9OCZd0XjzOIad2VbUPSMoVK1X8hdD2Ad+jUXCzhZJf0RaN6B+79AW5jSgceAgyAtLXiBayLlaqSjZM6oyti9gc2M2BXzoDKLye+Tgpftd72Zreb4HpwKGpVrJ3H3Ip5DNLSD4a1ovAJ6Sahjb8z34T8c1OCnf5j70Y7i9t3y/j076XIUU4vWpAhI9LRAOkSLqDUubRX/ZdPmwTgK91Dy1fxUQ4d02Ly4MTwV2+4OaEHhIfDSvakLBeg4jLGOSxLY0y38DocYzMXe0exJXkLxqHKMznpgGrbps0TPfSK0c3q2PxQLczCD3n63HxbN8U9FPyGeMrz59PPpkwIDAQAB
-----END PUBLIC KEY-----</Value>
<Ref/>
</AssignVariable>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>
注意:始终建议使用KeyValueMap而不是直接使用私钥或秘密等值。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<VerifyJWT async="false" continueOnError="false" enabled="true" name="Verify-JWT-1">
<DisplayName>Verify JWT-1</DisplayName>
<Algorithm>RS256</Algorithm>
<PublicKey>
<Value ref="public.key"/>
</PublicKey>
<Subject>Subject from the JWT token</Subject>
<Issuer>http://issue-of-the-token.com</Issuer>
<Audience>aud1,aud2</Audience>
</VerifyJWT>
注意:其他输入可以使用 AdditionalClaims 标记进行验证。
单击AssignMessage,JWTPolicy或KeyValueMap了解更多信息。