Я следую этому руководству о том, как настроить мой ASP. NET Core Web API с Azure AD Auth для вызова моего клиента приложения-демона.
Я полагаю, что я все настроил в соответствии с руководством, но когда я получаю токен и вызываю свой API, я все равно получаю 401, возвращаемых на контроллере с атрибутом [Authorize]
.
Я должен что-то упустить. Вот соответствующий код:
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
...
services
.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme)
.AddAzureADBearer(options => Configuration.Bind("AzureAd", options));
services.Configure<JwtBearerOptions>(AzureADDefaults.JwtBearerAuthenticationScheme, options =>
{
options.TokenValidationParameters.ValidAudiences = new[]
{
options.Audience, // my-api-client-id-guid
Configuration["AadAudienceUrl"], // https://myapi.azurewebsites.net
};
}
...
}
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseAuthorization();
...
}
appsettings. json
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "my-api-client-id-guide",
"TenantId": "my-tenant-id-guid"
},
MyController.cs
[Authorize] // No role checks yet, just want to get basic auth working first
[ApiController]
[Route("mycontroller")]
public class MyController : ControllerBase
{
...
}
Код клиента для получения токена:
AuthenticationContext ac = new AuthenticationContext(
authority: "https://login.microsoftonline.com/my-tenant-id-guid",
validateAuthority: true);
AuthenticationResult ar = await ac.AcquireTokenAsync(
"my-api-client-id-guid",
// "https://myapi.azurewebsites.net", // Both of these return a token successfully, but return 401 when used
new ClientCredential("my-daemon-app-client-id-guid", "daemon-app-secret"));
var token = new AuthenticationHeaderValue(ar.AccessTokenType, ar.AccessToken);
Манифест для WebAPI:
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"description": "Allow the application to access the service",
"displayName": "Application Access",
"id": "my-access-guid",
"isEnabled": true,
"lang": null,
"origin": "Application",
"value": "ApplicationAccess"
}
],
Я предоставил приложению-демону это приложение Роль: User assignment required?
установлен на No
для веб-API.
Чего мне не хватает, чтобы это успешно вернулось?