【问题标题】:OAuth2 - Securing multiple webservices' APIs with one tokenOAuth2 - 使用一个令牌保护多个 Web 服务的 API
【发布时间】:2013-01-19 19:51:25
【问题描述】:

我有三个 Web 服务公开它们的 API。

在内部,它们在不同的端口上运行,但在同一台服务器上。 然后我有一个 nginx 实例将这些服务映射到“api.domain.com”,以便可以从 Web 访问它们。

现在我需要保护这项服务,我正在考虑 OAuth2。 不幸的是,我没有使用 OAuth2 的经验,所以我想知道是否有一种方法可以为所有三个 Web 服务使用一个访问令牌,而无需为每个服务使用不同的身份验证。

我想做的是让消费者能够获得一次授权,然后访问 api.domain.com 下的所有服务(这只是对我们内部服务的反向代理转发请求)。

然后我需要创建一个简单的接口来对这些服务执行某些操作。 它将允许我的用户使用他们的帐户信息登录,当然这个接口本身就是这些服务的消费者,我可以跳过授权部分并允许这个应用程序通过登录来代表用户工作吗?它将与服务在同一台服务器上运行。

我可以使用 OAuth2 做到这一点,还是我更好地寻找其他东西?

【问题讨论】:

    标签: web-services security oauth oauth-2.0


    【解决方案1】:

    是的,无论您是否使用 OAuth,您都可以这样做。

    您可以拥有一个位于需要身份验证的服务/应用程序前面的反向代理。如果请求未经身份验证,它将重定向到正在使用的任何身份验证机制。一旦发生这种情况,它会设置一个经过身份验证的请求标头,其中包含用户名,并且请求将传递给配置的任何规则。

    我不确定 nginx,但我使用了 mod_authnz_ldap、mod_auth_cas 等 apache 模块来确保通过它的请求经过身份验证。这是我的 apache 配置示例,它使用 CAS 进行身份验证并检查用户 LDAP 组的授权(用户应属于开发人员组)

    # a2enmod
    #    proxy_http
    #    auth_cas
    #    authnz_ldap
    
    <VirtualHost *:80>
        ServerName servername
    
        LogLevel debug
    
        CASVersion 2
        CASDebug On 
        CASValidateServer Off
        CASLoginURL cas <loginurl>
        CASValidateURL <casvalidateurl>
    
        <Location />
            AuthType CAS
    
            AuthLDAPUrl ldap
            AuthLDAPGroupAttribute memberUid
            AuthLDAPGroupAttributeIsDN off
    
            Require valid-user
            Require ldap-group cn=developers,ou=Groups,dc=company,dc=com
            Satisfy All
        </Location>  
    
        ProxyPreserveHost On
        ProxyRequests Off
        ProxyPass / http://localhost:8080/
        ProxyPassReverse / http://localhost:8080/
    </VirtualHost>
    

    Oauth 是否适合您真的取决于您的用例。在我看来,你并不真的需要这个,但我也没有足够的信息。

    【讨论】:

    • 刚刚发现这是一个很老的问题,但把答案留在这里以防它帮助别人查看问题(我已经打出来了)。
    猜你喜欢
    • 1970-01-01
    • 2014-08-16
    • 2020-07-28
    • 2015-02-20
    • 2015-07-08
    • 2013-03-27
    • 2014-06-30
    • 2018-05-13
    • 2015-10-05
    相关资源
    最近更新 更多