2017-10-24 8 views
0

匿名ユーザーへのアクセスを許可しないASP.NET MVCアプリケーションをビルドしようとしています。アプリの使用を許可されていない認証済みのユーザーに表示されます)。Azure AD reply url:openid connect authを使用するときにいくつかのURLを追加する方法

今、私はazureポータル(portal.azure.com)に自分のアプリを登録しました。私はいくつかのURLを使用したいと思います。私は、起動時に認証を設定するには、次のコードを使用してい

  1. https://localhost/test
  2. https://www.test.com

public void ConfigureAuth(IAppBuilder app) { 
    app.SetDefaultSignInAsAuthenticationType(
      CookieAuthenticationDefaults.AuthenticationType); 
    app.UseCookieAuthentication(new CookieAuthenticationOptions()); 
    app.UseOpenIdConnectAuthentication(
     new OpenIdConnectAuthenticationOptions {                       
      ClientId = clientId,                       
      Authority = authority,                       
      PostLogoutRedirectUri = postLogoutRedirectUri,                       
      Notifications = new OpenIdConnectAuthenticationNotifications { 
      SecurityTokenValidated = VerificaUtilizadorAutenticado, 
      AuthenticationFailed = TrataErroAutenticacao 
     } 
    }); 
} 

すべてが正常に動作しているように見えた私は2つのエントリを追加しましたしかし、アプリケーションを公開した後、私はURIのうちの1つしか使うことができないようです。私は検索しましたが、OpenIdConnectAuthenticationOptionsのRedirectUriプロパティを使用して返信URLを設定できるようです。だから、私はセットアップにこれを追加しようとしました:

残念ながら
RedirectUri = "https://localhost/test", 

、すべてを破壊し、ブラウザが私のアプリとMSのログイン・ページの間で立ち往生されることをやって。ユーザーはログインしているので、ユーザーを自分のアプリケーションにリダイレクトします。しかし、RedirectUriの設定では、アプリの認証Cookieが生成されないので、ユーザーはログインページに戻ります。

RedirectUriを削除した場合、https://localhost/testウェブアプリケーションにアクセスしようとしても、https://www.test.comサイトにリダイレクトされます。

私は何が分かっていませんが、何か不足しています...誰でも手伝ってもらえますか?

ありがとうございました。

ルイス

+0

ユーザのログイン画面のURLを共有できますか?正しく処理していれば、そのURLに '&redirect_uri = https:// localhost/test'のようなクエリ文字列のパラメータがあるはずです。 –

+0

こんにちはショーン。それは設定されていません。 redirect_uriパラメータはありません... これは、常に最初のURLにリダイレクトされるようです... –

答えて

0

掘り下げた後、私はredirecturiを設定するときに問題となっていたのは、スラッシュ(/)がないことでした。ですから、ポータルに定義されているURLに/を追加し、オプションオブジェクトのリダイレクトリにも入れておけば、別のURIに対しても動作させることができました...

1

あなたはAADログインエンドポイント(https://login.microsoftonline.com)にサインインしたいユーザを送信すると、あなたは、ユーザー(および承認コード)をバックにリダイレクトする場所を指定する必要があります。

次の2つの方法でこれを指定:

  1. あなたはアプリ作成の一部として、アプリケーションのメイン設定で返信のURLを設定する必要があります。 から

    https://login.microsoftonline.com/{tenant}/oauth2/authorize? 
    client_id=6731de76-14a6-49ae-97bc-6eba6914391e 
    &response_type=code 
    &redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F <-- this guy 
    &response_mode=query 
    &resource=https%3A%2F%2Fservice.contoso.com%2F 
    &state=12345 
    

を指定しない場合はリダイレクト

  • あなたは正確にあなたが設定されたURLのいずれかに一致するログインURL、中に返信のURLを指定する必要があります。 URIを入力すると、ユーザーはアプリの登録で指定された最初のURLにリダイレクトされます。それはあまりにも悪くはありませんが、AADは返信URLを順序付けられていないリストとして扱いますので、ヒットしたサーバーやデータがどのように複製されたかによって、異なるサインイン試行で異なるリダイレクト動作が観察されることがあります。そのため、ログインエンドポイントに常にredirect_uriパラメータを指定することが重要です。

    ADAL librariesを使用してサンプルコードに示されているライブラリではなく認証すると問題が解決する可能性がありますが、これらを使用したくない場合は、次のような詳細を共有する必要があります。認証プロセスのHTTPトレース

  • +0

    こんにちは再びショーン。徹底的な返答をありがとう。私はあなたに同意しますが、もし私がそうすれば(そして私は試してみました)、リダイレクトの間に立ち往生します(紺碧の広告にログインした後、私はホームページにリダイレクトされ、すぐに再度ログインページに戻ります。私はすでに前にサインインしているので、サイトに戻ってきます...そして、それは続けていきます...)。コードについては、アプリを紺碧に接続したときにvsによって自動的に生成されました...私はすべてがうまくいくと思っていました...しかし、それはそうではないようです... –

    +0

    残念ながら、あなたの問題をデバッグするのは難しいです。私が持っている質問は次のとおりです:「正常に認証コードを取得していますか?アクセストークンの認証コードを正常に交換していますか?そのアクセストークンはトークンキャッシュに正しく保存されていますか?ここの図書館は「正しいこと」を行い、図書館がやるべき個々のステップを実際に調査していません。私はそれが問題の調査を開始する必要があると思います。そうでなければ、既知の作業サンプル[here](https://github.com/azure-samples)を使用してください。 –

    +0

    こんにちは、ショーン。はい、多くのことが間違っている可能性があります。私は、ここでの問題は、認証に使用されるクッキーを生成するために、内部的にパイプラインミドルウェアでredirecturiを処理する必要があるということです。私はリダイレクトリをホームページに設定すると私のホームページにリダイレクトされますが、ユーザーは外部プロバイダによってのみ認証されているため、認証クッキーはありません。したがって、ユーザーをホームページにリダイレクトするということは、新しい401のチャレンジを生成することを意味します...私はここで何が起こっているのかを見るためにソースコードを見なければならないと思います... –

    関連する問題