Используйте Basi c Auth для указания c Controller вместо Azure AD - PullRequest
0 голосов
/ 04 февраля 2020

Я использую шаблон проекта с аутентификацией AzureAD.

С [AllowAnonymous] возможно отключить аутентификацию для моего контроллера.

Но как включить некоторую настраиваемую базовую c аутентификацию для указанных c API-контроллеров в. NET Core 3,1?

У меня есть AuthorizationFilterAttribute:

public override void OnAuthorization(HttpActionContext actionContext)
{
        if (actionContext.Request.Headers.Authorization != null)
        {
            var authToken = actionContext.Request.Headers
                .Authorization.Parameter;

            // decoding authToken we get decode value in 'Username:Password' format
            var decodeauthToken = System.Text.Encoding.UTF8.GetString(
                Convert.FromBase64String(authToken));

            // spliting decodeauthToken using ':' 
            var arrUserNameandPassword = decodeauthToken.Split(':');

            // at 0th position of array we get username and at 1st we get password
            if (IsAuthorizedUser(arrUserNameandPassword[0], arrUserNameandPassword[1]))
            {
                // setting current principle
                Thread.CurrentPrincipal = new GenericPrincipal(
                new GenericIdentity(arrUserNameandPassword[0]), null);
            }
            else
            {
                actionContext.Response = actionContext.Request
                .CreateResponse(HttpStatusCode.Unauthorized);
            }
        }
        else
        {
            actionContext.Response = actionContext.Request
             .CreateResponse(HttpStatusCode.Unauthorized);
        }
}

public static bool IsAuthorizedUser(string Username, string Password)
{
        // In this method we can handle our database logic here...
        return Username == "TestUser" && Password == "TestPassword";
}

В моем контроллере API я использую

[ApiController]
[BasicAuthentication]
[Route("api/[controller]")]

Когда я вызываю мой HTTP GET, приложение пытается войдите с помощью AzureAD вместо Basi c Auth.

Я пробовал такие глупые вещи, как [AllowAnonymous] на контроллере и [BasicAuthentication] на методе ...

...