В настоящее время я немного изучаю функции Azure с .NET 8 и OpenId Connect, поэтому в настоящее время я использую функцию [Get], ответ которой представляет собой просто объект, указывающий на любой допустимый возврат (например: Protected Route, 200). Мне нужно проверить токен доступа (JWT), добавленный в заголовок запроса, чтобы запрос можно было обработать. Может ли кто-нибудь помочь мне с примерами, действительными ссылками?
Заранее большое спасибо...
Я искал способ разработки промежуточного программного обеспечения для проверки токена доступа, но не нашел в Интернете или в сообществе ничего, что могло бы помочь мне с этим или любым другим способом решения проблемы.
Чтобы лучше помочь вам, не могли бы вы предоставить более подробную информацию о том, что вы уже пытались решить проблему? Любые фрагменты кода, сообщения об ошибках или конкретные шаги, которые вы предприняли, будут полезны. Эта информация поможет сообществу лучше понять вашу проблему и предложить более точные решения.
@LuanSouza-DevLuanS0, пожалуйста, проверьте, помогло ли вам приведенное ниже решение. Дайте мне знать, если я могу чем-то еще помочь.
Выполните следующие действия, чтобы проверить токен доступа, полученный в заголовке в изолированных функциях Azure.
Manage=>Authentication
в приложении => укажите Redirect URI
и проверьте токен доступа и токены идентификатора, которые должны быть выданы, как показано ниже:URI перенаправления:
https://localhost:<port_number>/.auth/login/aad/callback
Установите пакеты в функции Azure:
Microsoft.AspNetCore.Authentication.OpenIdConnect
Microsoft.AspNetCore.Authorization
Microsoft.Identity.Web
Используйте приведенный ниже код для проверки токена доступа:
var host = new HostBuilder()
.ConfigureFunctionsWebApplication()
.ConfigureServices(services =>
{
services.AddApplicationInsightsTelemetryWorkerService();
services.ConfigureFunctionsApplicationInsights();
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddOpenIdConnect(options =>
{
options.Authority = "https://your-openid-connect-provider.com/Tenant_ID/V2.0";
options.ClientId = "client-id";
options.ClientSecret = "client-secret";
options.ResponseType = "code";
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
});
})
.Build();
host.Run();
Код для проверки токена доступа:
var openIdConnectHandler = new OpenIdConnectHandler();
await openIdConnectHandler.InitializeAsync(request);
await openIdConnectHandler.ValidateTokenReceptionAsync(request);
await openIdConnectHandler.HandleRemoteAuthenticateAsync(request);
await openIdConnectHandler.HandleAuthenticationAsync();
Функция.cs:
var claimsPrincipal = executionContext.GetHttpContext().User;
if (!claimsPrincipal.Identity.IsAuthenticated)
{
return new UnauthorizedResult();
}
var name = claimsPrincipal.FindFirst(ClaimTypes.Name)?.Value;
var email = claimsPrincipal.FindFirst(ClaimTypes.Email)?.Value;
return new OkObjectResult(new
{
Name = name,
Email = email
});
Проверьте, помогает ли эта статья.