2017-07-12 17 views
1

openID Connectハイブリッドフローを使用してIdentity Server 3で認証するMVC Webアプリケーションを構築しています。MVC WebアプリケーションにはjQueryスクリプトが含まれていて、ApenControllerから非同期JSONデータを取得します。そのApiControllerは、同じMVC Webアプリケーションの一部です。Identity Server 3でWeb APIを保護する方法

誰もがAPIからデータにアクセスできないようにするため、APIも保護したいと思います。私はApiControllerに[authorize]属性を追加しました。私は、次のエラーメッセージが表示されますはJQueryのAjaxのリクエストにAPIを要求する場合:

XMLHttpRequestが https://localhost:44371/identity/connect/authorize?....etcをロードすることはできません。 プリフライト要求への応答がアクセス制御チェックを通過しません。いいえ 要求された リソースに 'Access-Control-Allow-Origin'ヘッダーが存在します。したがって、オリジン 'http://localhost:13079'は許可されません。 応答は、HTTPステータスコード405

を持っていた。しかし、私はブラウザ内で直接APIメソッドに要求を行うとき、私はアイデンティティサーバーのログインページへの正しいリダイレクトされます。..

だから、何ですまさにここの問題?私は何かを読んで/ authorizeエンドポイントは 'バックチャネル'経由で許可されていないが、私は 'フロントチャネル'と 'バックチャネル'の違いを理解していません。間違ったOAuthの流れが混在する可能性はありますか?ハイブリッドの流れは正しいかもしれませんか?

APIはしばしば別個のアプリケーションであることがわかりましたが、たとえばベアラトークンを必要とする別個のAPIアプリケーションを構築するには、常に必要な/ベストプラクティスですか?

これについて正しい方向を教えてください。

答えて

0

アイデンティティ・サーバーのauthorizeメソッドでは、ajax呼び出しが許可されません。 CORSヘッダーを指定しても、この特定のケースではあなたを助けるつもりはありません。おそらく、リダイレクトの代わりに禁止された応答を返し、window.locationを介してクライアントを目的の場所に手動でリダイレクトすることができます。

0

「Cross Origin Resource Sharing」または略語を許可することで、他のドメインからIdentityServerにアクセスできるようにする必要があります。 IdentityServerではこれを許可する最も簡単な方法は、あなたのJavaScriptクライアントのためのあなたのクライアントの構成であり、IdentityServer docs on CORSからこれを参照してください。CORSをconfiguingへ

一つのアプローチは、クライアントの構成にAllowedCorsOriginsコレクションを使用することです。クライアントの起点をコレクションに追加するだけで、IdentityServerのデフォルト設定ではこれらの値を参照し、起点からのクロスオリジンコールを許可します。

あなたが見ているエラーは、それはあなたのJavscriptクライアントからの要求を許可した場合、それはIdentityServerを尋ねられたとき、原点(http://localhost:13079が)に指定されていなかったので、それは、ないと言って、基本的な応答を返したことを知らせるブラウザです"Access-Control-Allow-Origin"応答ヘッダー。実際、ヘッダーはCORSが有効になっていないという意味での応答ではありませんでした。

JavaScriptクライアントをドキュメントhereから追加するクイックスタートに従うと、クライアント設定に必要なコードがすべて記述され、CORSを許可するようにIdentityServerをセットアップする必要があります。

関連する問題