使用 Client_credential oauth 授予是好是坏? [关闭]

Posted

技术标签:

【中文标题】使用 Client_credential oauth 授予是好是坏? [关闭]【英文标题】:Using Client_credential oauth grant good or bad? [closed] 【发布时间】:2018-09-29 22:30:23 【问题描述】:

我有几个 API 并构建了一个 Web 应用程序,该应用程序将使用这些 API 来加载和更新数据库中的数据。我已将 OAuth 服务器、API 端点配置为 OAuth 资源服务器,并将 Web 应用程序配置为 OAuth 客户端。

我正在考虑使用 SAML 进行身份验证和 OAuth 进行授权以保护 API 端点的想法。但是经过大量的研究和阅读,我找不到任何与春天相同的东西。

最初,我尝试了 Auth_code 授权,但它不适用于 SAML 身份验证,因为 OAuth 资源服务器也需要对用户进行身份验证。我将尝试在 OAuth 服务器上实现 pre_auth_filter 以查看它是否适用于 SAML 身份验证。但目前,我尝试了 OAuth 服务器的 client_credentials 授权。它运作良好。但是,如果 OAuth 客户端和服务器在同一网络上运行,那么从安全角度来看,为 Web 应用程序使用 client_credentials 授权是否是一种好方法?此外,如果 Web 应用程序部署在多台服务器上,它们是否可以共享相同的客户端 ID 和密码?

【问题讨论】:

为什么要实现 saml AND oauth ?我认为您只需要一个:mutuallyhuman.com/blog/2013/05/09/… 用户身份验证由 SAML Idp 管理,API 端点将通过基于身份验证的授权工作流来保护。 【参考方案1】:

我见过的最常见的用法是使用带有 Oauth 2.0 框架的 Spring Security 进行身份验证和授权。在复杂的环境中,会有一个集中的身份验证服务器,负责对所有用户进行身份验证并 所有应用服务。在这种情况下,客户端服务的推荐选项是使用client_credentials 授权类型来验证自己。对于 RESTful 服务,Spring 为此提供了OAuth2RestTemplate。

客户端凭据将是每个应用程序服务而不是每个应用程序实例。

众所周知,保护传输中数据的最常用方法是使用 TLS (SSL) 传输数据。由于所有这些 Web 应用程序服务都在同一个网络上,因此您可以使用自签名证书。同样,每个服务的证书不是每个应用程序实例。不用说,对于公开暴露的资源,请使用由证书颁发机构签发的证书。

【讨论】:

感谢您的回答。由于缺乏声誉,我无法支持您的答案。我在 UI 应用程序本身上配置 OAuth 客户端。因此,如果我在多个服务器上运行同一 UI 应用程序的多个实例,这就是我正在考虑的场景。​​

以上是关于使用 Client_credential oauth 授予是好是坏? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

OAuth认证

AuthorizationServerConfigurerAdapter 已弃用

使用 graph Api 获取 Facebook 页面事件

微信公众号推送模板消息

使用Laravel的Azure Active Directory SSO

多系统集中管理服务器