【问题标题】:Protect my RESTful services by a Keycloak Oauth2 Provider Using NGINX使用 NGINX 通过 Keycloak Oauth2 提供程序保护我的 RESTful 服务
【发布时间】:2019-07-26 01:12:01
【问题描述】:

我们在某个 URI 上有一些 Restful 服务,我们想在网络上发布我们的服务,以便在我们的移动应用程序中使用它们(用 java 编写),

我们的服务位于无法同时处理太多请求的服务器上,并为此使用了它的 proxy_pass 功能,

所以我在中间服务器上使用 Nginx 来控制对我们 REST 服务器的访问,

现在我们希望通过 Oauth2 使用密码或客户端凭据保护我们的服务(因为我们的移动用户不应登录我们的服务器,因此我们无法向他们显示任何登录页面),

我设置了一个正在运行的 Keycloak 服务器,我可以为我的客户获取令牌。我将把我的 auth/token URI 提供给我们的移动开发人员,以便首先获取 Oauth2 令牌并在他们的请求中使用它。

问题是我不知道如何配置 Nginx 以使用请求标头中提供的令牌来授权传入的 REST 请求。

我应该配置 Keycloak 来处理请求并将授权的请求转发到 NGINX 吗?

感谢您的帮助

【问题讨论】:

    标签: rest nginx oauth-2.0 authorization keycloak


    【解决方案1】:

    经过一些尝试,我找到了这个解决方案:

    1-你必须将 njs 模块添加到 nginx 这是必要的,你必须先编译它(所以在 Windows 中会很麻烦,我尝试了 mingw 并停在一个名为 expect 这不是为 mingw 编写的,它浪费了我很多时间,实际上我将我们的 IAM 移到了 ubuntu 并在那里编译 njs 和 nginx 在几分钟内就完成了!)

    2- Introspection是这里的key subject,keycloak支持,它的URI和token URI加introspect一样,header中使用Basic Authorization,body中使用token

    3- nginx在添加njs模块后也支持自省,这将使nginx支持js代码包含在配置文件中,一个很好的例子是NGINX Demoes- Oauth2 Introspection OSS,只需复制配置文件和oauth2.js文件即可。我在 nginx 配置文件的 location 标记处添加了 api 指令,让调用者知道它是受保护的。

    4-在keycloak中为nginx创建一个客户端进行自省操作,它应该是机密模式并且应该为它启用Service Accounts

    5- nginx 应该将 auth/token 请求转发(代理传递)到 IAM,因此应该在配置文件中添加一个位置。

    6- [对于 ubuntu] 我在 nginx 中有一个错误,告诉我它无法解析 localhost!并安装 Bind 9 为我解决了这个问题(这里又浪费了时间)。

    7- 所以任何人想要使用我们的服务都应该首先请求令牌,然后将其请求附加令牌发送到 nginx,nginx 会检查令牌以及令牌是否正常 {"active": true} 收到后将请求转发给资源,并通过密码回复请求者。

    全部完成。

    【讨论】:

      猜你喜欢
      • 2018-06-13
      • 2015-07-08
      • 2012-01-17
      • 2016-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 2017-05-11
      • 1970-01-01
      相关资源
      最近更新 更多