web-dev-qa-db-ja.com

JWTのAzure ADカスタムクレーム

私はAzure ADアプリを持っています、そして私はJWTへのカスタムクレームを追加しようとしています。私は私の特定のアプリのためにAzureでクレームマッピング機能を使用しており、azureポータルでアプリがオプションの請求を含めるようにアップデートしました。ただし、復号化されたアクセストークンをログインして表示すると、クレームはトークンには存在しません。クレームとしての拡張属性を使用することに関する多くのドキュメントが見つかりませんでしたが、私が見つけたことから、同じパターンに従うべきですが、予想通りに機能していません。

ユーザーがログインしたときに、ADのユーザーオブジェクトのカスタムプロパティからサポートされているカスタムクレームを追加するにはどうすればよいですか。

前もって感謝します!

再作成する手順

  1. Azure ADグラフAPIを使用してディレクトリ拡張子を登録します。

リクエスト:

POST https://graph.windows.net/mytenant.onmicrosoft.com/applications/<application-object-id>/extensionProperties?api-version=1.5

体:

{
   "name": "customUserRoles",
   "dataType": "String",
   "targetObjects": ["User"]
}
  1. 特定のADユーザーの拡張子に値を書き込む

リクエスト:

PATCH https://graph.windows.net/mytenant.onmicrosoft.com/users/[email protected]?api-version=1.5

体:

{
   "extension_<appId>_customUserRoles": "My Custom Role 1, Another Role 2"
}
  1. PowerShellでは、Azure ADモジュールをインストールしました。Install-Module -Name AzureADPreview
  2. Azure ADポリシーを作成します
New-AzureADPolicy -Definition @('{"ClaimsMappingPolicy":{"Version": 1, "IncludeBasicClaimSet": "true", "
ClaimsSchema": [ { "Source": "user", "ID": "extension_<appId>_customUserRoles", "JwtClaimType": "customUserRoles" } ] } }') -DisplayName "customUserRoles" -Type "ClaimsMappingPolicy"
  1. サービスプリンシパルにポリシーを追加します
Add-AzureADServicePrincipalPolicy -Id <service-principla-id> -RefObjectId <Azure-ad-policy-id>
  1. Azure Portalでは、Azure AD - > App Registrations - > My App - > Manifestに移動します。
  2. 次のプロパティを更新します
{
   ...
   "acceptMappedClaims: true,
   "optionalClaims": {
      "idToken": [
         {
            "name": "extension_<appId>_customUserRoles",
            "source": "user",
            "essential": false,
         }
      ],
      "accessToken": [
         {
            "name": "extension_<appId>_customUserRoles",
            "source": "user",
            "essential": false,
         }
      ],
      "samlToken": []
   }
}
  1. ファイルを保存してください
  2. Azure ADユーザーアカウントでhttps://login.microsoftonline.com/mytenant.onmicrosoft.com/oauth2/authorize?client_id=<appId>&response_type=token&resource=https://mytenant.sharepoint.comに移動してログインしてください[email protected]
  3. URLでは、access_tokenパラメータの値をコピーします。
  4. https://jwt.msに移動し、テキスト領域のアクセストークンを貼り付けます
  5. 復号化されたトークンセクションでは、カスタムクレーム CustomUserRoles NOT現在

私の期待は、復号化されたトークンでcustomUserRolesまたはextn.customUserRolesという名前の新しい請求を見るべきです。

私は何のステップがありませんか?私はこのプロセス全体のエラーを獲得していませんが、ドキュメントが提案されているので機能しているようです。


参照素材

これらのトピックに関するマイクロソフトのマニュアルを読みました。

オプションの特許請求の範囲: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-optional - claims

クレームマッピング: https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory - claims-mapping


私はまた、これに関連するさまざまなフォーラム投稿とブログの記事を読みました。

https://devonblog.com/cloud/azure-ad-adding-employeeid-claims-in-azure-ad-jwt-token/

http://www.redbaronofazure.com/?p=7566

https://social.msdn.microsoft.com/forums/en-us/3e5114b6-24d6-4c60-b72b-b4c90baeecac/b4c90baeecac/ccess-token-missing-optional - claims-that-are-schema-extensions-暗黙的なgrant-flow

https://social.msdn.microsoft.com/forums/en-us/dbeeed63-8d3f-4c27-b416-431F9FE6C729/49/4C27-80-8D31F9FE6C729/PROVIDING-Directory-Extension-Optional-Claims-antund-within-トークン?Forum = WindowsAzureD

6
halshing

に基づく この公式 DOC:

アクセストークンは、クライアントではなく、リソースのマニフェストを使用して常に生成されます。そのため、リクエスト内... scope = https://graph.microsoft.com/user.read ...リソースはグラフです。したがって、クライアントのマニフェストではなく、Graph Manifestを使用してアクセストークンが作成されます。アプリケーションのマニフェストを変更すると、グラフにトークンが異なるように見えることはありません。 AccessTokenの変更が有効であることを検証するには、別のアプリではなくアプリケーションのトークンを要求してください。

そしてあなたの要求に基づいて、MSFTによって作成され管理されたマルチテナントアプリであるSharePoint Onlineのどのリソースの変更をいくつか変更したい場合は不可能です。

このDOC 、私はまたあなたのためにいくつかの研究をしました。そしてそれと同じ、あなたはそれを起こすことができるようにサービス側のアプリを制御する必要があります。

これは私のポリシーロール割り当てコマンドです。

$nsp = New-AzureADPolicy -Definition @('{"ClaimsMappingPolicy":{"Version":1,"IncludeBasicClaimSet":"true", "ClaimsSchema": [{"Source":"user","ID":"mailnickname","JwtClaimType":"testclaim"}]}}') -DisplayName "StanCustomCliamDemo_surname" -Type "ClaimsMappingPolicy"

Add-AzureADServicePrincipalPolicy  -RefObjectId $nsp.Id -Id '<obj id of service side app>'
 _

トークン結果: enter image description here

さらに、PLSはextension_<appId>_customUserRolesは有効なユーザーソースIDではありません。有効なすべてのユーザーソースIDについて、PLSは ここで を参照してください。

それが役に立てば幸い 。

1
Stanley Gong