2017-12-01 20 views
1

私はDjango Oauth Libraryを使用しています。Django OAuth-個別のリソースと認証サーバー

私は別の認証サーバーとリソースサーバーを使いたいと思っています。

認証サーバーでは、次の設定があります。

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', 

}

私はRESOURCE_SERVER_AUTH_TOKENを入手するにはどうすればよい質問1)

?トークンをイントロスペクトする際

質問2)

、認証サーバーは、コンソールログに403禁止エラーを返します。

以下は、アクセストークンを取得するフローです。

リソースサーバーにクライアントのPOSTリクエストからclient_id, client_secret, grant_type and scopesが届きました。 AuthServerリソースサーバーから呼び出し、クライアントに応答を返します。

私はここで何が欠けていますか?

+0

現在、私は自分のマシンでローカルに開発しています。 – PythonEnthusiast

+0

'RESOURCE_SERVER_AUTH_TOKEN'とは何ですか? – PythonEnthusiast

+0

リソースサーバーAUTH TOKENは、イントロスペクションエンドポイントがリソースサーバーを認証するために使用するトークンです。しかし、イントロスペクションまたはIntial client Authorizationグラントでエラーが発生していますか?イントロスペクションではなく、AUTHサーバーでエラーが発生しているようです。 –

答えて

1

django-oauth-toolkitの実装によれば、リソースサーバーは最初にアクセストークンがそのdbで利用可能かどうかをチェックしようとします。

アクセストークンが存在しない場合は、イントロスペクションURLがチェックされ、イントロスペクショントークンが設定で使用可能になります。イントロスペクション設定が利用可能な場合、リソースサーバーはイントロスペクションエンドポイントでユーザートークンを検証しようとします。

したがって、権限がIsAuthenticatedとして設定されているため、AUTH SERVERとDRFが403 Forbiddenをリタイアしている可能性があります。無効なトークンまたは無効なユーザーが原因である可能性があります。

リソースサーバーのユーザーを作成し、リソースサーバーユーザーのアプリケーションを作成します。アプリケーションを作成する

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

と管理サイトを介してトークンを生成し、新しく作成されたトークンと設定リソースサーバのイントロスペクションを更新します。トークンの作成中に適切なスコープを指定してください。

+0

最後の質問(:P)では、AUTH_SERVERの設定 'OAUTH2_PROVIDER ['SCOPES']'を更新せずにスコープを設定する方法を教えてください。私は、auth_serverに新しいスコープを追加する必要があるたびに、アプリケーションをリロードする必要があることを意味します。 – PythonEnthusiast

+0

この@Sajiについて考えてみませんか? – PythonEnthusiast

+0

あなたは私に同じもののユースケースを教えてもらえますか?設定で定義されたスコープは特別なシナリオ用です - クライアントが承認を要求する際にscopeパラメータを省略した場合、認証サーバーはあらかじめ定義された既定値を使用して要求を処理する必要があります。これは標準的な命令です。どのくらいの頻度でデフォルト値を変更しますか? 。 –

関連する問題