因此,在设置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可以绕过某些东西?)。
答案 0 :(得分:1)
使用OWIN时,允许将访问令牌存储在声明中。它与.NET Core建议的使用AuthenticationProperties
和RemoteAuthenticationOptions
将它们存储在SaveTokens
中的方法相当。两种方法都会导致令牌包含在客户端的会话cookie中。
请注意,如果尚未减少Cookie的大小,您可以考虑利用IdentityServer4 ReferenceTokens。