10

我正在使用Django Oauth Library

我想要不同的身份验证和资源服务器。

在 Auth Server上,以下是我的设置。

INSTALLED_APPS = [
    ...


    'oauth2_provider',
    'rest_framework',
]


REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

# ############## OAUTH SETTINGS ###################

OAUTH2_PROVIDER = {
    'SCOPES': {'users': 'user details', 'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups', 'introspection': 'introspection'},
    'ACCESS_TOKEN_EXPIRE_SECONDS': 86400,  # 1 Day.
}

在我的资源服务器上

INSTALLED_APPS = [
    ...


    'oauth2_provider',
    'rest_framework',
]


REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}

# ############## OAUTH SETTINGS ###################

OAUTH2_PROVIDER = {
'RESOURCE_SERVER_INTROSPECTION_URL': 'http://localhost:8000/o/introspect/',
'RESOURCE_SERVER_AUTH_TOKEN': '3yUqsWtwKYKHnfivFcJu',

}

问题1)

我如何获得RESOURCE_SERVER_AUTH_TOKEN

问题2)

内省令牌后,Auth Server 在控制台日志中返回 403 Forbidden Error。

以下是获取访问令牌的流程。

client_id, client_secret, grant_type and scopes从客户端 POST 请求到Resource Server。我从资源服务器调用AuthServer并将响应返回给客户端。

我到底错过了什么?

4

1 回答 1

12

根据 django-oauth-toolkit 实现,资源服务器首先尝试检查其数据库中是否有访问令牌。

如果访问令牌不存在,它将检查自省 URL 和自省令牌在设置中是否可用。如果自省设置可用,则资源服务器尝试使用自省端点验证用户令牌。

所以问题似乎是 AUTH SERVER 和 DRF 可能会返回 403 Forbidden,因为权限设置为 IsAuthenticated。这可能是由于令牌无效或用户无效。

所以为资源服务器创建一个用户,然后为资源服务器用户创建一个应用程序。

创建应用程序,

client_type=Application.CLIENT_CONFIDENTIAL
authorization_grant_type=Application.GRANT_AUTHORIZATION_COD‌​E

并通过管理站点生成令牌,并使用新创建的令牌更新资源服务器 INTROSPECTION 设置。确保在创建令牌时放置适当的范围。

于 2017-12-05T07:52:42.917 回答