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