.Net core web api - авторизация на основе ролей (разрешить определенные домены без запроса JWT) - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть API, который использует стандартную авторизацию на основе ролей и JWT.Мне нужно разрешить определенным доменам использовать API без предоставления JWT, в то же время продолжая использовать основанную на ролях аутентификацию для других пользователей.Есть ли способ сделать это?Могу ли я назначить роли этим доменам, если такой способ существует?

1 Ответ

0 голосов
/ 13 февраля 2019

Вы можете использовать фильтр авторизации.Когда требуется авторизация, фильтр выполняется.В фильтре вы можете проверить домен набора текущего пользователя, включая роли:

//using System;
//using System.Collections.Generic;
//using System.Security.Claims;
//using System.Security.Principal;
//using System.Web;
//using System.Web.Http.Controllers;
//using System.Web.Http.Filters;

public class AddIdentityFilter : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    {
        var allowedIpAdresses = new List<string> { "127.0.0.1", "" };
        // Replace with your code to test the domain
        var isInDomain = allowedIpAdresses.Contains(GetIp());
        var identity = HttpContext.Current.User.Identity;

        if (!identity.IsAuthenticated && isInDomain)
        {
            // Add the roles to the new Identity
            HttpContext.Current.User = new GenericPrincipal(new GenericIdentity("DomainUser"), new[] { "Admin" });
        }
        base.OnAuthorization(actionContext);
    }

    // Helper to determine the ipaddress
    private string GetIp()
    {
        var context = (HttpContextBase)HttpContext.Current.Items["MS_HttpContext"];
        if (context != null)
            return context.Request.UserHostAddress;

        if (HttpContext.Current != null)
            return HttpContext.Current.Request.UserHostAddress;

        return null;
    }

}

В WebApiConfig.cs добавьте фильтр:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Only needed for Owin
        config.SuppressDefaultHostAuthentication();

        config.Filters.Add(new AddIdentityFilter());

        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...