2017-05-31 38 views
1

私はいくつかのアプリケーションをホストするAzureにテナントを持っています。私はOpenID Connectを使って認証しています。 login.microsoft.comのopenid-configurationには、end_session_endpointというURLが指定されています。 Thisの記事では、ログアウトリクエストの送信方法について説明しています。これでAzureのセッションは終了しますが、クライアント(Angular2 SPA)ではセッションが終了しません。これを行うには、私はangular-oauth2-oidc、次のコードを使用しています:CORSの問題Azure AD OpenID ConnectログアウトAngular app

this.http.get('https://login.microsoftonline.com/TENANT_ID/oauth2/logout",') 
    .toPromise() 
    .then(function() { 
     this.oauthService.logOut(); 
    } 
); 

GETをlogin.microsoftonline.comにすると、サーバー上のセッションが終了しますとlogOut()コールは、ローカルセッションを終了します。私はこれを実行すると、私は次のエラーを取得する:私はlogin.microsoftonline.com GETからのレスポンスをチェックすると

XMLHttpRequest cannot load https://login.microsoftonline.com/TENANT_ID/oauth2/logout . No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:51518 ' is therefore not allowed access.

Access-Control-Allow-Originはレスポンスヘッダの一つではありません。私は値として*というヘッダーを持たないことに非常に驚いています。いずれにしても、どうすればこの問題に対処できますか? App ServicesにCORS設定があり、テナント内のアプリケーションのCORSにローカルホスト(現地でのテスト)を追加しましたが、まだ動作していません。

私は一時的に、自分のアプリAPIにAPIエンドポイントを追加しました。このAPIエンドポイントはC#でlogin.microsoftonline.comのURLに電話をかけますが、それをする必要はありません。私はすべてjavascriptでやってみたいです。

答えて

0

ブラウザをURLにリダイレクトする必要があります。 AJAXで呼び出すことはできません。

You must also redirect the user to the end_session_endpoint for sign-out.

Azure ADは、ログインエンドポイントでクロスドメインコールを許可しないため、変更することはできません。

あなたはにユーザーをリダイレクトすることができます

https://login.microsoftonline.com/ccb87602-82bf-4f35-b7d2-aa‌​aaaaaaaaaa/oauth2/lo‌​gout?post_logout_red‌​irect_uri=https%3a%2‌​f%2fsitename.azurewe‌​bsites.net%2fHome%2f‌​SignedOut 

post_logout_redirect_uriパラメータを使用するには、ユーザーのブラウザがログアウト後にリダイレクトする場所を指定することができます。この方法では、ユーザーはコンテキストを失うことはありません。リダイレクトする前に、ユーザーの作業をアプリ側に保存して、怒っているユーザーになることがないようにしてください。

+0

私がこの文書で読んだ言葉は、「あなたは** end_session_endpointにユーザーをリダイレクトすることができます」ということでした。エンドポイントにリダイレクトするとセッションが終了しますが、使用しているテナント/アプリケーションのコンテキストが失われます。したがって、ユーザーがログアウトしていた場合や、ユーザーのセッションを明示的に終了している場合(たとえば、非アクティブのb/c)、アプリに戻る唯一の方法(もちろん再認証が必要)は、アプリのURLにこれは本当に貧弱なユーザーエクスペリエンスです。 – im1dermike

+0

パラメータには、ログアウト後のリダイレクトURIを指定できます。その後、サインアウトした後、ユーザーはアプリにリダイレクトされます。 – juunas

+0

URLの例を以下に示します: 'https://login.microsoftonline.com/ccb87602-82bf-4f35-b7d2-aaaaaaaaaaaa/oauth2/logout?post_logout_redirect_uri = https%3a%2f%2fsitename.azurewebsites.net%2fHome%2fSignedOut' 。 – juunas

関連する問題