Django OAuth - 分离资源和授权服务器
Django OAuth- Separate Resource and Authorization Server
我正在使用 Django Oauth Library。
我想要不同的 Auth 和 Resource Server。
在 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 return控制台日志中出现 403 禁止错误。
获取访问令牌的流程如下。
我从客户端 POST 收到 client_id, client_secret, grant_type and scopes
到 资源服务器 的请求。我从 Resource Server 调用 AuthServer 并将 return 响应返回给客户端。
我到底错过了什么?
根据 django-oauth-toolkit 实现,资源服务器首先尝试检查访问令牌是否在其数据库中可用。
如果访问令牌不存在,它将检查内省 URL 并且内省令牌在设置中可用。如果内省设置可用,则资源服务器会尝试使用内省端点验证用户令牌。
所以问题似乎是 AUTH SERVER 和 DRF 可能会返回 403 Forbidden,因为权限设置为 IsAuthenticated。这可能是由于令牌无效或用户无效。
所以为资源服务器创建一个用户,然后为资源服务器用户创建一个应用。
正在创建应用程序,
client_type=Application.CLIENT_CONFIDENTIAL
authorization_grant_type=Application.GRANT_AUTHORIZATION_CODE
并通过管理站点生成一个令牌,并使用新创建的令牌更新资源服务器的 INTROSPECTION 设置。确保在创建令牌时放置适当的范围。
我正在使用 Django Oauth Library。
我想要不同的 Auth 和 Resource Server。
在 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 return控制台日志中出现 403 禁止错误。
获取访问令牌的流程如下。
我从客户端 POST 收到 client_id, client_secret, grant_type and scopes
到 资源服务器 的请求。我从 Resource Server 调用 AuthServer 并将 return 响应返回给客户端。
我到底错过了什么?
根据 django-oauth-toolkit 实现,资源服务器首先尝试检查访问令牌是否在其数据库中可用。
如果访问令牌不存在,它将检查内省 URL 并且内省令牌在设置中可用。如果内省设置可用,则资源服务器会尝试使用内省端点验证用户令牌。
所以问题似乎是 AUTH SERVER 和 DRF 可能会返回 403 Forbidden,因为权限设置为 IsAuthenticated。这可能是由于令牌无效或用户无效。
所以为资源服务器创建一个用户,然后为资源服务器用户创建一个应用。
正在创建应用程序,
client_type=Application.CLIENT_CONFIDENTIAL
authorization_grant_type=Application.GRANT_AUTHORIZATION_CODE
并通过管理站点生成一个令牌,并使用新创建的令牌更新资源服务器的 INTROSPECTION 设置。确保在创建令牌时放置适当的范围。