[英]Is it possible to authenticate from an Azure-hosted web app using an external AD?
[英]How to authenticate web api in WPF app using Azure AD
我在我的 WPF 应用程序中使用此代码:
var app = PublicClientApplicationBuilder.Create(_clientId)
.WithRedirectUri("http://localhost/")
.WithAuthority(AzureCloudInstance.AzurePublic, _tenantId).Build();
try
{
result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
}
catch (MsalUiRequiredException)
{
return Result<UserMetadata>.NotAuthorized("There was on error");
}
而且效果很好。 现在我可以调用我的 WEB API 并将“承载令牌”header 发送到所有端点。 (令牌是我从结果中获得的 access_token 属性)
在 web api 我只是这样做:
_ = services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
它有效。
但是,我不希望所有端点都受到这种方法的保护(我有其他身份验证机制) C# 代码作为结果),将其发送到服务器上并在特定 controller 内部尝试“登录”用户(从该代码获取 access_token)
原因是我已经有了自己的身份验证机制,该机制基于数据库中的用户表。
如果我理解正确,您只想使用 AD 保护选定的 API 端点。 您当然可以通过如下设置Startup.cs
来做到这一点:
services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer("AAD", jwtOptions =>
{
jwtOptions.Authority = $"{appConfiguration.AppSettings.AadInstance}/{appConfiguration.AppSettings.AadDomain}";
jwtOptions.Audience = appConfiguration.AppSettings.AadClientId;
jwtOptions.Events = new JwtBearerEvents
{
OnAuthenticationFailed = arg =>
{
// invoked if authentication fails
return Task.FromResult(0);
}
};
});
services.AddAuthorization(options =>
{
options.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().AddAuthenticationSchemes("AAD").Build();
options.AddPolicy("AAD", new AuthorizationPolicyBuilder().RequireAuthenticatedUser().AddAuthenticationSchemes("AAD").Build());
});
并且,将属性添加到要保护的所需 Controller/Action 方法,如下所示:
[Authorize(Policy = "AAD")]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.