OK、ここ Angular では単純なものが不足している可能性がありますが、実際にはいくつかの助けが必要です。サービス プリンシパルの READER ロールをプログラムでサブスクリプションに付与しようとしています。PostMan を使用すると、問題なく動作します。ただし、Angular6 経由で同じ PUT 要求を送信すると、Azure から次のような 400 エラーが返されます。
リクエストの内容が無効で、元のオブジェクトを逆シリアル化できませんでした。例外メッセージ: '必要なプロパティ 'パーミッション' が JSON に見つかりません。パス「プロパティ」、行 1、位置 231。
どちらの場合も送信される JSON は次のとおりです。
{
"properties":
{
"roleDefinitionId":"/subscriptions/{some_subscription_guid}/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7",
"principalId":"{some_service_provider_guid}"
}
}
両方のリクエストからトラフィックをキャプチャしました。それらは PUT でアプリケーション/json ペイロードとして表示されます。そのため、このエラーの原因となっている Azure を介して誤って逆シリアル化しているものを失っています。ここに記載されている REST の指示に従おうとしています: https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-rest
私が見逃しているアイデアはありますか?
アップデート
リクエストごとに RAW REQUEST を追加します。Fiddler の出力から他に何も変更せずに、機密データ (アクセス トークン、GUID など) を置き換えました。
PUT https://management.azure.com/subscriptions/<VALID_SUBSCRIPTION_WAS_HERE>/providers/Microsoft.Authorization/roleDefinitions/7ec2aca1-e4f2-4152-aee2-68991e8b48ad?api-version=2015-07-01 HTTP/1.1
Host: management.azure.com
Connection: keep-alive
Content-Length: 233
Accept: application/json, text/plain, */*
Origin: http://localhost:4200
Authorization: Bearer <VALID_TOKEN_WAS_HERE>
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Content-Type: application/json
Referer: http://localhost:4200/token/<VALID_DOMAIN_WAS_HERE>.onmicrosoft.com/graph
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
{"properties": { "roleDefinitionId":"/subscriptions/<VALID_SUBSCRIPTION_GUID_HERE>/providers/Microsoft.Authorization/roleDefinitions/acdd72a7-3385-48ef-bd42-f606fba81ae7", "principalId":"<VALID_OBJECTID_HERE>" }}