LoginSignup
0
0

社員向けWebアプリケーションでAzureB2Cを採用するまでの検討経緯

Posted at

とある社内向けWebアプリを開発するときに認証基盤をどうするか検討した。
クラウドはAzureを使うので、Azure内でなんとかする。

前提

  • 特に社内でActiveDirectoryなど使用していない
  • 社員全員がメールアドレスを持っているわけではない 
    • 社員番号くらい
  • 使用するのは社員のみ、ゲストなども必要なし
  • 認証基盤自体は無料で使いたい
  • ユーザー数は〜1,000程度

候補

Azureの認証基盤なので候補は実質2つ

  1. EntraID
  2. Azure AD B2C

EntraID (Azure AD B2B)

  • 会社などの組織向けの認証基盤
  • すでにADを導入してると連携できたりする

B2Bは導入しなかった、その理由

ログイン画面のカスタマイズができない

B2BではPremium(等)でないとログイン画面のカスタマイズができません。
通常のMicrosoftログインの画面になる。
参考)https://learn.microsoft.com/ja-jp/entra/fundamentals/how-to-customize-branding

けどB2Bではできること

MicrosoftGraphAPIが使用できる

meの情報などを取ってこれる=トークンに載らない追加情報をAPIから取ってこれる。
追加情報に部署など入れていても安心。

グループの情報がトークンに載せられる

グループ=ロールの設定をすることによりロールベースのアクセス制御がかけやすくなる。

Azure Active Directory B2C を利用することにした

ログイン画面がカスタマイズできる

Webに不慣れな方でも一目で自社のアプリだとわかってもらえる。

ただし…

GraphAPIは使用できない

User.Read.Allの権限を与えてもダメみたい。

グループなど、トークンに載せられない属性がけっこうある

トークンに載せたい情報は無理やり他の項目にマッピングさせた。
上記のようにロールが使えないので、必然的にポリシーベース認証の実装が必要。

B2Cを使うにあたり

不特定のサインアップをさせるわけではないので、ユーザーはSDKを利用して一括作成する。

ユーザーのインポート

B2BとB2CではSDKからのユーザーの作り方が違います。
B2Bと同じように作ってしまうと、非ローカルアカウント=B2Cのフローでログインできないユーザー
になってしまうので注意。
正しくは↓を参照
https://learn.microsoft.com/en-us/graph/api/user-post-users?view=graph-rest-1.0&tabs=csharp#request-1
Identitiesは複数無くても良い、メールアドレスでのログインなら

SignInType = "emailAddress"

を指定しておく。

所感

わかってしまえば簡単なんだけど、どうも公式がわかりにくい&ネットでの情報が少なめ…
あとチュートリアルがそのまま動かなかったりするのもわかりにくい…

0
0
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
0
0