Как я могу получить токен на предъявителя из куки? - PullRequest
0 голосов
/ 04 декабря 2018

Я использую аутентификацию токена на предъявителя.Я решил сохранить токен в куки клиента.Я создал пользовательский ServerAuthProvider, который наследует OAuthAuthorizationServerProvider.Я переопределил метод TokenEndpointResponse(), который помещает токен в куки (добавление токена в куки работает нормально):

public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
{
    if(String.IsNullOrEmpty(context.AccessToken))
    {
        context.Response.Redirect("/Authentication/Login");
    }
    else
    {
        context.Response.Cookies.Append("SocialNetworkApp", context.AccessToken);
    }

    return base.TokenEndpointResponse(context);
}

Затем я создал пользовательский SimpleAuthorizeAttribute, который наследует AuthorizeAttribute и я переопределил OnAuthorization(), который берет токен из куки и добавляет его в заголовки запроса.Но проблема в том, что HandleUnauthorizedRequest() вызывает всегда.

public class SimpleAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var tokenKey = "SocialNetworkApp";
        var cookies = filterContext.HttpContext.Request.Cookies;

        if (cookies.AllKeys.Contains(tokenKey))
        {
            var token = cookies[tokenKey].Value;
            filterContext.HttpContext.Request.Headers.Add("Authorization", "Bearer " + token);

            var tokenFrom = filterContext.HttpContext.Request.Headers.Get("Authorization");
        }

        base.OnAuthorization(filterContext);
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            //if not logged, it will work as normal Authorize and redirect to the Login
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Authentication", action = "Login" }));
        }
        else
        {
            //logged and wihout the role to access it - redirect to the custom controller action
            filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new { controller = "Home"}));
        }
    }
}

Если я устанавливаю заголовок «Авторизация» на стороне клиента (например, почтальоном), он работает нормально.Как я могу решить эту проблему?

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