Azure Service Bus
Queue
アプリケーションからアクセスしようとしていWindows Service
ます。私はこのサンプルに従っています。
Azure Service Bus
これを使用して保護したいAzure Service Principal
以下は、私が実装した手順です
-
私の代理で名前が付け
pc-shutdown-producer
られたアプリケーションを登録するAzure Ad
Windows Service
service bus namespace
名前付きの Azure を作成しましたshutdowncomputer
- 内部に、以下の値
Access control (IAM)
を追加しましたRole Assignment
- 役割 -
Azure Service Bus Data Owner
- アクセスを割り当てる -
pc-shutdown-producer
- 役割 -
上記の私の知識によると、構成により、pc-shutdown-producer
アプリケーションはサービスバス名前空間内のすべてのリソースを管理できます。4. これとは別にpc-shutdown-producer
、サービス バスの名前空間にアクセスするための委任された API アクセス許可も提供しました。
以下は私のC#コードです。
public async Task Init()
{
string authority = $"https://login.windows.net/{TenantId}";
ITokenProvider tokenProvider = TokenProvider.CreateAzureActiveDirectoryTokenProvider(AuthenticationCallback, authority);
var endpoint = new Uri($"sb://shutdowncomputer.servicebus.windows.net/");
var entityPath = "shutdownrequest";
var qc = new QueueClient(endpoint.ToString(), entityPath, tokenProvider);
Message m = new Message();
m.Body = Encoding.ASCII.GetBytes("{id: 1, name: 'hemant'}");
m.ContentType = "application/json";
try
{
await qc.SendAsync(m);
}
catch (Exception ex)
{
//I am getting exception here.
//Unauthorized access. 'Send' claim(s) are required to perform this operation.
throw ex;
}
}
private async Task<string> AuthenticationCallback(string audience, string authority, object state)
{
string accessToken = string.Empty;
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(AppId)
.WithAuthority(authority)
.WithClientSecret(Password)
.Build();
var serviceBusAudience = new Uri("https://servicebus.azure.net");
List<string> claims = new List<string>();
claims.Add($"{serviceBusAudience}/.default");
try
{
var result = await app.AcquireTokenForClient(claims.ToArray()).ExecuteAsync();
accessToken = result.AccessToken;
}
catch (Exception ex)
{
//No issue here.
Console.WriteLine(ex.Message);
}
//Successfully able to retrieve a token.
return accessToken ;
}
を実行するInit()
と、以下の例外メッセージが表示されます。
Unauthorized access. 'Send' claim(s) are required to perform this operation. Resource: 'sb://shutdowncomputer.servicebus.windows.net/shutdownrequest'. TrackingId:52c0eedcf19d4513a8ec105943859764_G12, SystemTracker:gateway7, Timestamp:2020-05-11T06:59:01
更新 1
@Carl Zhao の提案に従って、管理者に同意を提供しましpc-shutdown-producer
たが、まだ同じ問題が発生しています。
ありがとう