2

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

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

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

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

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

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

4

1 回答 1

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 是否适合您,实际上取决于您的用例。从我所见,您并不需要这样做,但我也没有足够的信息。

于 2013-07-17T06:47:15.803 回答