1

私はIdentity Serverを使って認証を管理するMVC Webアプリケーションを持っています。これは正常に動作し、ログインするためにブラウザをIDサーバにリダイレクトしてから、自分のアプリケーションにリダイレクトします。MVCとJS Identity Serverの認証を組み合わせる

しかし、私のアプリケーションはかなりの量のAjaxとJavaScriptコールを使用するため、Ajaxメソッドの1つが呼び出されたときにページがリダイレクトされ、アプリケーションに正しくリダイレ​​クトされないという問題があります。

ドキュメントを見ると、JS Authenticationが私に必要なものを与え、ポップアップまたはiFrameで認証トークンを暗黙的に更新できるように見えます。

ドキュメントごとにoidc-client-jsを使用してアプリケーションをセットアップしましたが、アプリケーションにトークンをサイレントに読み込ませることができず、Ajaxコールがまだ失敗します。

マイoidcクライアントのセットアップコードは、ページのロード上で実行され、次のようになります。

var settings = { 
    authority: 'http://localhost:8000/identity', 
    client_id: 'client', 
    popup_redirect_uri: 'http://localhost:8000/popup.html', 
    automaticSilentRenew: true, 
    silent_redirect_uri: 'http://localhost:8000/silentrenew.html', 

    response_type: 'id_token token', 
    scope: 'openid profile email api', 
    filter_protocol_claims: true 
}; 

var mgr = new Oidc.UserManager(settings); 

クライアントはpopup.htmlとsilentrenew.htmlファイルからリダイレクトを許可するハイブリッド流れとセットアップで設定されています。

Popup.html

<html> 
<head> 
    <title></title> 
    <meta charset="utf-8" /> 
</head> 
<body> 
<script src="/js/oidc-client.min.js"></script> 
    <script> 
     Oidc.Log.logger = console; 
     Oidc.Log.logLevel = Oidc.Log.INFO; 
     new Oidc.UserManager().signinPopupCallback(); 
    </script> 
</body> 
</html> 

Silentrenew.html

<html> 
<head> 
    <title></title> 
</head> 
<body> 
    <script src="/js/oidc-client.min.js"></script> 
    <script> 
     Oidc.Log.logger = console; 
     Oidc.Log.logLevel = Oidc.Log.INFO; 
     new Oidc.UserManager().signinSilentCallback(); 
    </script> 
</body> 
</html> 

誰もが私の認証トークンはサイレントリダイレクトURIを使用して更新されていない理由を支援することができ、または私は更新の私の問題を解決する方法Ajax呼び出しのトークン。

+1

最後にこれでどこに行ったのですか?私は似たような立場にいます...最終的に私は自分のJavaScriptクライアントが自動的に私のmvcアプリケーションと同時にログインするようにしたいと思います。 –

+0

@PaulHinettいいえ、私は自分のアプリケーションのメインページに自分のクライアントのRedirectUriを設定したので、少なくとも空白の画面には終わっていませんでした。 – Steve

答えて

0

最初のコードスニペットでは、クライアントのUserManagerが読み込まれますが、ユーザーの読み込みは試行されません。そのことを確認するログエントリが表示されます。

は、だから今、私はまだidsrvとidsrv.sessionクッキーすでにOPにユーザーを認証している

私のアプリケーションで

var mgr = new Oidc.UserManager(settings);

行の後に、ユーザーにログインする方法を決定するためのロジックを必要とします存在する。私の場合、私はmgr.signinSilent();と呼ぶことができ、それはユーザーのためにsessionStorageを立ち上げて復元するだけでなく、自動的に新しいロジックを開始する(silentRenew.htmlの私のコードは同じです)。

セッションがない場合は、アプリケーションに応じてmgr.signinRedirect()またはmgr.signinPopup()のいずれかを使用できます。これらのメソッドといくつかの詳細が利用可能ですon the github wiki

関連する問題