将access_token存储在用户的授权声明中是否安全?

时间:2019-06-08 23:53:49

标签: authorization openid-connect claims-based-identity bearer-token

因此,在设置IdentityServer4时,我无法进行Bearer身份验证。基本上,我无法调用我的API资源,并收到401错误。当我添加带有access_token的Authorization标头时。我能够从Web请求中获取数据。

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

我获得auth_token的方式是将一个存储在用户中的声明存储在Idenity服务器客户端安装程序证明的SecurityTokenValidated回调中。

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创建一个简单的请求,并手动将相同的Bearer授权令牌粘贴到请求中,然后发送。响应给了我“安全的” api数据。那对我来说,如果有人可以使用auth_token,他们可以访问API(或者Postman可以绕过某些东西?)。

1 个答案:

答案 0 :(得分:1)

使用OWIN时,允许将访问令牌存储在声明中。它与.NET Core建议的使用AuthenticationPropertiesRemoteAuthenticationOptions将它们存储在SaveTokens中的方法相当。两种方法都会导致令牌包含在客户端的会话cookie中。

请注意,如果尚未减少Cookie的大小,您可以考虑利用IdentityServer4 ReferenceTokens