1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AzureAD認証を使ったSPAでAPIサーバー側でグループクレームがどうしても取れなかった

Posted at

Azure ActiveDirectory (B2Cでない方)を認証に使う

ログインユーザーの権限管理でサンプルにもある、ロールベースやポリシーベースを使おうとしていた。
AzureAD(Free)での権限管理はいろいろ方法があるみたい。ドキュメントもちょっと散らかってる感あってわかりにくい…

紹介されているやりかた(全部ではないかも)

アプリケーションにアプリ ロールを追加してトークンで受け取る

参照)https://docs.microsoft.com/ja-jp/azure/active-directory/develop/howto-add-app-roles-in-azure-ad-apps
ちなみにですがB2Cのテナントだと画面が違います。アプリロールやトークン構成のメニューはありません。
ただB2Cでも同じ設定はマニフェストの編集により可能です。
(ずっとB2Cの画面で探しててそれにもハマった…)

参考:ロールベース

テナントにカスタムロール追加

https://docs.microsoft.com/ja-jp/azure/active-directory/roles/custom-create
AzureAD(Free)では使えません。
ADテナント全体にロールを作成する方法(ビルトインロール以外)

ポリシーベース

一番カスタム可能な内容、ユーザークレーム(属性)に条件付与してポリシーを適用できたりする。
ここでグループクレームからポリシーを適用しようとしたが、groupがAPI側で取れていなかった。(後述)
参考)
https://docs.microsoft.com/ja-jp/azure/active-directory/hybrid/how-to-connect-fed-group-claims
サンプル)
https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/blob/master/5-WebApp-AuthZ/5-2-Groups/README.md

クレームベース

クレームベース∈ポリシーベース
ということかな。

ユーザーをグループに割り当ててグループによりポリシーを適用しようとした。

ここから本題

今回の構成はSPA(Blazor WASM+ASP.NET Core)なので、公式参照しながら設定
参考)
https://docs.microsoft.com/ja-jp/aspnet/core/blazor/security/webassembly/hosted-with-azure-active-directory?view=aspnetcore-6.0
このへんから。

逸る気持ちを抑えて、じっくり読めばちゃんと動くはず。いらちを発動するとよくハマるので。笑

では次に別のチュートリアル参照しながら、特定のグループに所属しているユーザーのみコールできるAPI(ASP)を作成する。

https://docs.microsoft.com/ja-jp/azure/active-directory/develop/active-directory-optional-claims?WT.mc_id=translate-blog-yoterada#configuring-groups-optional-claims
このへんでまずはクライアント(SPA側)にGroupsが入るように設定した。
ちなみにこのドキュメント内の「[管理] で、 [トークン構成] を選択します。」はB2Cテナントでは表示されません。(再

ここでハマりポイント(自分的)だったのはトークン発行されるのはSPA側なので、上記のトークン構成はクライアント側しかやっていなかった。

本当はサーバー側も設定が必要だった。

起こっていた状態

id_tokenにはgroupsのclaimがあったが、
access_tokenにはgroupsが入っていない。
→ASP側でgroupsが判別できない。

jwt.ioで確認しまくった…

やったこと(解決)

サーバー側アプリケーションのトークン構成でもgroupsの設定をする。

ちなみに、Audienceがない、と言われてログインもできないとき

https://docs.microsoft.com/ja-jp/aspnet/core/blazor/security/webassembly/hosted-with-azure-active-directory?view=aspnetcore-6.0#app-settings
上記参照、ちょっと日本語わかりにくいがAudienceの設定がsettings.jsonあたりに必要なようす。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?