none
Spring BootアプリのAzure Active Directoryのoauth2を用いた認証で、Azure上にデプロイしたプロジェクトで認証するとAADSTS50011が発生する RRS feed

  • 質問

  • Spring Boot/Azure Adcive Directoryとも初心者の開発者です。

    Spring Bootを使ったバックエンドのプログラムで、Azure Active Directoryの認証を利用したいと考えています。

    <https://docs.microsoft.com/ja-jp/java/azure/spring-framework/configure-spring-boot-starter-java-app-with-azure-active-directory>

    にそってSpring Bootのプロジェクトを作成しました。

    (1点異なる点として、「新しいアプリケーションの登録」ではなく、すでにデプロイのテストを行っていたApp Serviceを指定しています)

    プロジェクト作成後、デプロイに向けて、pom.xmlに

    <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-tomcat</artifactId>
             <scope>provided</scope>

    </dependency>

    を追加し、メインクラスもextends SpringBootServletInitializerを追加、

    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
            return application.sources(XXXApplication.class);
        }

    メソッドも追加しました。

    ビルドし、Spring Tool Suiteに付属のサーバ機能でlocalhost:8080で試したところ、うまく認証も出来、トップページが表示されたのですが、

    同じプロジェクトをwarにして、ADの設定ページのうち、「アプリの登録」-「(アプリ名)」-「設定」の「応答URL」を、

    http://localhost:8080/login/oauth2/code/azureから、https://(アプリ名).azurewebsites.net/login/oauth2/code/azureに変更し

    AppServiceにwarを展開し、App Serviceを再起動して、https://(アプリ名).azurewebsites.netを開いたところ、ログインのページが

    表示されるところまでは確認出来たのですが、ユーザを選択してパスワードを入力すると、

    「Message: AADSTS50011: The reply url specified in the request does not match the reply urls configured for the application: xxxx...」

    が発生し、ログインできません。

    AzureのApp Serviceにデプロイしたい場合、応答URLには何を設定したらよいのでしょうか。

    (また、localhostの場合も、デプロイした場合も、設定したADのドメイン名と異なる、全体管理者のユーザでログインしようとすると、何も表示されず、ログインのページにリダイレクトされ再度ユーザ選択画面が出てくることが繰り返されます。)

    よろしくお願い申し上げます。

    2018年7月28日 13:17

回答

  • server.use-forward-headers=true だと実際にアクセスしたURLがRedirectUrlに設定されそうなので、Httpsで設定したのであればHttpsでアクセスすればよいかと思います。

    またAADのアプリのマニフェストを直接編集することでRedirectUrlで許可するURLを複数指定することもできます。

    • 回答としてマーク May2yuki 2018年7月30日 12:03
    2018年7月29日 15:32
    モデレータ
  • ご回答、ありがとうございます。

    server.use-forward-headers=true

    を指定し、spring.security.oauth2.client.registration.azure.redirect-uri-templateは削除しますと、

    ログインページを表示する際のURLの末尾のredirect_uriが、http://(アプリ名).azurewebsites.net/login/oauth2/code/azureとなり、AADSTS50011が発生しましたが、

    ご指摘戴きました通り、AAD側の設定で、応答URL(英語ですとreply urls)に、hppts://(アプリ名).azurewebsites.net/login/oauth2/code/azureに加え、http://(アプリ名).azurewebsites.net/login/oauth2/code/azureを追加したところ、認証後、トップページが表示されるようになりました。

    ご回答戴いたおかげで無事に解決いたしました。ありがとうございました。

    • 回答としてマーク May2yuki 2018年7月30日 12:03
    2018年7月30日 12:03

すべての返信

  • application.properties ファイルで

    spring.security.oauth2.client.registration.azure.redirect-uri-template=https://(アプリ名).azurewebsites.net/login/oauth2/code/azure

    と設定するか

    server.use-forward-headers=true

    を設定するなどして生成されるリダイレクトURLがAzure上のURLと一致するようにしてはどうでしょうか。
    AADのログイン画面のURL引数にリダイレクトURLが渡っているはずなのでそこが意図したものかどうか(Azure上のURLかどうか)とそのURLがAADのアプリの設定の応答URLと合っているかどうか確認する必要があります。

    リダイレクトループになるのは指定したグループに全体管理者が含まれていないからとか権限不足などではないでしょうか。

    2018年7月28日 20:48
    モデレータ
  • k.buchiさま

    ご回答ありがとうございます。

    >spring.security.oauth2.client.registration.azure.redirect-uri-template=https://(アプリ名).azurewebsites.net/login/oauth2/code/azure

    >と設定するか

    >server.use-forward-headers=true

    それぞれ実行してみましたが、結果は変わらずAADSTS50011が発生しました。

    また、ログインページに飛ぶ際、URLの末尾を確認したところ

    redirect_uri=http://(アプリ名).azurewebsites.net/login/oauth2/code/azure

    となっており、意図したところになっているように見えました。

    再度、ADへのアプリの登録からやり直してみます。ほかに何かヒントがありましたらご教授戴ければと存じます。

    2018年7月29日 8:51
  • すみません、いま気づいたのですが、redirect_urlがhttp://になっており、httpsではありませんでした。
    こちらの記載が不足していました。このあたりを再度確認してみます。
    2018年7月29日 9:28
  • 度々申し訳ありません。

    再度ADへのアプリの登録からやり直しました。

    まず、spring.security.oauth2.client.registration.azure.redirect-uri-template

    を設定しない場合、redirect_urlがhttp://...となっており、https://ではないためか、AADSTS50011が発生します。

    spring.security.oauth2.client.registration.azure.redirect-uri-templateに、https://(アプリ名).azurewebsites.net/login/oauth2/code/azureを設定したところ、

    Your login attempt was not successful, try again.

    Reason: [invalid_redirect_uri_parameter]

    のエラーに変わりました。

    何かパラメータがおかしいようなので、もう少し調べてみます。

    2018年7月29日 9:53
  • server.use-forward-headers=trueを設定した場合は、

    redirect_uriがhttp://(アプリ名).azurewebsites.net/login/oauth2/code/azureとなり、AADSTS50011が発生しました。

    2018年7月29日 10:48
  • server.use-forward-headers=true だと実際にアクセスしたURLがRedirectUrlに設定されそうなので、Httpsで設定したのであればHttpsでアクセスすればよいかと思います。

    またAADのアプリのマニフェストを直接編集することでRedirectUrlで許可するURLを複数指定することもできます。

    • 回答としてマーク May2yuki 2018年7月30日 12:03
    2018年7月29日 15:32
    モデレータ
  • ご回答、ありがとうございます。

    server.use-forward-headers=true

    を指定し、spring.security.oauth2.client.registration.azure.redirect-uri-templateは削除しますと、

    ログインページを表示する際のURLの末尾のredirect_uriが、http://(アプリ名).azurewebsites.net/login/oauth2/code/azureとなり、AADSTS50011が発生しましたが、

    ご指摘戴きました通り、AAD側の設定で、応答URL(英語ですとreply urls)に、hppts://(アプリ名).azurewebsites.net/login/oauth2/code/azureに加え、http://(アプリ名).azurewebsites.net/login/oauth2/code/azureを追加したところ、認証後、トップページが表示されるようになりました。

    ご回答戴いたおかげで無事に解決いたしました。ありがとうございました。

    • 回答としてマーク May2yuki 2018年7月30日 12:03
    2018年7月30日 12:03