我正在使用Angular 7开发标准.NET Web Api 2,并且需要连接Azure Active Directory。
我添加了以下代码:
public static void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = configurationManager.AadTenant,
TokenValidationParameters = new TokenValidationParameters
{
ValidAudience = configurationManager.AadAudience,
},
});
}
我的租户和观众都是正确的。一切正常,令牌有效并且存在于请求中。
问题在于IsAuthenticated始终为假,当我以身份身份查看声明时为空
protected override bool IsAuthorized(HttpActionContext actionContext)
{
return base.IsAuthorized(actionContext); // Always false
}
我不知道问题出在哪里。我尝试了许多链接,但没有一个对我有用。有人知道为什么吗?谢谢
答案 0 :(得分:0)
要保护您的服务,可以使用IsAuthorize过滤器实现,如下所示:
private static string trustedCallerClientId = ConfigurationManager.AppSettings["ida:TrustedCallerClientId"];
protected override bool IsAuthorized(HttpActionContext actionContext)
{
bool isAuthenticated = false;
try
{
string currentCallerClientId = ClaimsPrincipal.Current.FindFirst("appid").Value;
isAuthenticated = currentCallerClientId == trustedCallerClientId;
}
catch (Exception ex)
{
new CustomLogger().LogError(ex, "Invalid User");
isAuthenticated = false;
}
return isAuthenticated;
}
主体不是从当前线程中获取的,而是从actionContext中获取的。因此,您必须设置的是操作上下文的请求上下文中的主体:
actionContext.RequestContext.Principal = yourPrincipal;
我假设您的操作上下文。requestcontext没有正确的数据,这就是即使请求成功但属性始终为false的原因。
参考:
https://www.c-sharpcorner.com/article/azure-active-directory-authentication/
希望有帮助。