При подключении Azure Active Directory к .NET Web Api проверка подлинности всегда ложна - PullRequest
0 голосов
/ 01 апреля 2019

Я разрабатываю стандартный .NET Web Api 2 с Angular 7, и мне нужно подключить 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
 }

Я не знаю, где проблема.Я перепробовал много ссылок, но ни одна из них не работала для меня.Кто-нибудь знает почему?Спасибо

1 Ответ

0 голосов
/ 02 апреля 2019

Чтобы защитить ваш сервис, вы можете использовать реализацию фильтра 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;

Я предполагаю, что ваш action context.requestcontext не имеет правильных данных, поэтому даже если вашзапрос выполняется, но ваш атрибут всегда ложный.

Ссылка:

https://www.c -sharpcorner.com / article / azure-active-directory-authentication / / 1013 *

Надеюсь, это поможет.

...