OAuth2 - 使用一个令牌保护多个Web服务的API

时间:2013-02-05 00:23:45

标签: web-services security oauth oauth-2.0

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

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

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

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

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

我可以使用OAuth2执行此操作,还是我更愿意寻找其他内容?

1 个答案:

答案 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对你来说是一个不错的选择,取决于你的用例。从我看到的情况来看,你并不是真的要求,但我也没有足够的信息。