Безопасно ли хранить access_token в заявке пользователя на авторизацию? - PullRequest
2 голосов
/ 09 июня 2019

Итак, у меня возникли проблемы с аутентификацией Bearer при настройке IdentityServer4.По сути, я не смог вызвать ресурс API и получил ошибку 401.Когда я добавил заголовок авторизации с access_token.Я смог получить данные из моего веб-запроса.

using (var client = new HttpClient())
{
        client.DefaultRequestHeaders.Authorization = new 
           AuthenticationHeaderValue("Bearer", authToken);
        var content = await  
          client.GetStringAsync("http://localhost:5000/localapi");
}

Способ, который я получил в auth_token, заключался в том, чтобы сохранить утверждение пользователя, которое было получено из обратного вызова SecurityTokenValidated, подтвержденного настройкой клиента сервера idenity.

Notifications = new OpenIdConnectAuthenticationNotifications
{
    SecurityTokenValidated = notification =>
    {
        var identity = notification.AuthenticationTicket.Identity;
        identity.AddClaim(claim: new Claim(type: "auth_token", value: 
           notification.ProtocolMessage.AccessToken));
        return Task.CompletedTask;
    }
}

Хотя это решает мою проблему с авторизацией, я хочу убедиться, что я не открываю вектор атаки, сохраняя свой auth_token в заявках на идентичность.Может кто-нибудь сказать мне, если это представляет проблему безопасности.

Причина, по которой я обеспокоен, заключается в том, что я смог использовать Postman для создания простого запроса и вручную вставить тот же токен авторизации на предъявителя в запрос, а затем отправить его.Ответ дал мне «защищенные» данные API обратно.Это говорит мне, что если кто-то получит в руки auth_token, он сможет получить доступ к API (или, может быть, Postman что-то обойдёт?).

1 Ответ

1 голос
/ 09 июня 2019

Хранение токена доступа в заявке допустимо при использовании OWIN.Это сопоставимо с рекомендуемым подходом .NET Core для хранения их в пределах AuthenticationProperties с использованием RemoteAuthenticationOptions с SaveTokens.Оба подхода приводят к тому, что токен содержится в файле cookie сеанса клиента.

В качестве дополнительного примечания можно рассмотреть возможность использования IdentityServer4 ReferenceTokens , если это еще не сделано, для уменьшения размера файла cookie.

...