Skip to content

Commit d48d1b2

Browse files
committed
Merge remote-tracking branch 'origin/dev_3.1' into feature/dev_3.1-add_logging
2 parents bbee086 + e27b3f3 commit d48d1b2

File tree

3 files changed

+124
-106
lines changed

3 files changed

+124
-106
lines changed

framework/src/Bing.Permissions/Identity/JwtBearer/Internal/JsonWebTokenStore.cs

Lines changed: 9 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Bing.Permissions.Identity.JwtBearer.Internal
77
/// <summary>
88
/// Jwt令牌存储器
99
/// </summary>
10-
internal sealed class JsonWebTokenStore : IJsonWebTokenStore
10+
internal sealed class JsonWebTokenStore : JsonWebTokenStoreBase, IJsonWebTokenStore
1111
{
1212
/// <summary>
1313
/// 缓存
@@ -20,112 +20,16 @@ internal sealed class JsonWebTokenStore : IJsonWebTokenStore
2020
/// <param name="cache">缓存</param>
2121
public JsonWebTokenStore(ICache cache) => _cache = cache;
2222

23-
/// <summary>
24-
/// 获取刷新令牌
25-
/// </summary>
26-
/// <param name="token">刷新令牌</param>
27-
public async Task<RefreshToken> GetRefreshTokenAsync(string token) =>
28-
await _cache.GetAsync<RefreshToken>(GetRefreshTokenKey(token));
29-
30-
/// <summary>
31-
/// 保存刷新令牌
32-
/// </summary>
33-
/// <param name="token">刷新令牌</param>
34-
public async Task SaveRefreshTokenAsync(RefreshToken token) => await _cache.AddAsync(GetRefreshTokenKey(token.Value), token, token.EndUtcTime.Subtract(DateTime.UtcNow));
35-
36-
/// <summary>
37-
/// 移除刷新令牌
38-
/// </summary>
39-
/// <param name="token">刷新令牌</param>
40-
public async Task RemoveRefreshTokenAsync(string token)
41-
{
42-
if (!await _cache.ExistsAsync(GetRefreshTokenKey(token)))
43-
return;
44-
await _cache.RemoveAsync(GetRefreshTokenKey(token));
45-
if (!await _cache.ExistsAsync(GetBindRefreshTokenKey(token)))
46-
return;
47-
var accessToken = await _cache.GetAsync<JsonWebToken>(GetBindRefreshTokenKey(token));
48-
await _cache.RemoveAsync(GetBindRefreshTokenKey(token));
49-
await RemoveTokenAsync(accessToken.AccessToken);
50-
}
51-
52-
/// <summary>
53-
/// 获取访问令牌
54-
/// </summary>
55-
/// <param name="token">访问令牌</param>
56-
public async Task<JsonWebToken> GetTokenAsync(string token) => await _cache.GetAsync<JsonWebToken>(GetTokenKey(token));
23+
/// <inheritdoc />
24+
protected override async Task AddAsync<T>(string key, T value, TimeSpan? expiration = null) => await _cache.AddAsync(key, value, expiration);
5725

58-
/// <summary>
59-
/// 移除访问令牌
60-
/// </summary>
61-
/// <param name="token">访问令牌</param>
62-
public async Task RemoveTokenAsync(string token)
63-
{
64-
if (!await _cache.ExistsAsync(GetTokenKey(token)))
65-
return;
66-
await _cache.RemoveAsync(GetTokenKey(token));
67-
}
26+
/// <inheritdoc />
27+
protected override async Task RemoveAsync(string key) => await _cache.RemoveAsync(key);
6828

69-
/// <summary>
70-
/// 保存访问令牌
71-
/// </summary>
72-
/// <param name="token">令牌</param>
73-
/// <param name="expires">过期时间</param>
74-
public async Task SaveTokenAsync(JsonWebToken token, DateTime expires)
75-
{
76-
await _cache.AddAsync(GetTokenKey(token.AccessToken), token, expires.Subtract(DateTime.UtcNow));
77-
await _cache.AddAsync(GetBindRefreshTokenKey(token.RefreshToken), token, expires.Subtract(DateTime.UtcNow));
78-
}
79-
80-
/// <summary>
81-
/// 是否存在访问令牌
82-
/// </summary>
83-
/// <param name="token">访问令牌</param>
84-
public async Task<bool> ExistsTokenAsync(string token) => await _cache.ExistsAsync(GetTokenKey(token));
29+
/// <inheritdoc />
30+
protected override async Task<bool> ExistsAsync(string key) => await _cache.ExistsAsync(key);
8531

86-
/// <summary>
87-
/// 绑定用户设备令牌
88-
/// </summary>
89-
/// <param name="userId">用户标识</param>
90-
/// <param name="clientType">客户端类型</param>
91-
/// <param name="info">设备信息</param>
92-
/// <param name="expires">过期时间</param>
93-
public async Task BindUserDeviceTokenAsync(string userId, string clientType, DeviceTokenBindInfo info,
94-
DateTime expires) => await _cache.AddAsync(GetBindUserDeviceTokenKey(userId, clientType), info,
95-
expires.Subtract(DateTime.UtcNow));
96-
97-
/// <summary>
98-
/// 获取用户设备令牌
99-
/// </summary>
100-
/// <param name="userId">用户标识</param>
101-
/// <param name="clientType">客户端类型</param>
102-
public async Task<DeviceTokenBindInfo> GetUserDeviceTokenAsync(string userId, string clientType) =>
103-
await _cache.GetAsync<DeviceTokenBindInfo>(GetBindUserDeviceTokenKey(userId, clientType));
104-
105-
/// <summary>
106-
/// 获取刷新令牌缓存键
107-
/// </summary>
108-
/// <param name="token">刷新令牌</param>
109-
private static string GetRefreshTokenKey(string token) => $"jwt:token:refresh:{token}";
110-
111-
/// <summary>
112-
/// 获取访问令牌缓存键
113-
/// </summary>
114-
/// <param name="token">访问令牌</param>
115-
private static string GetTokenKey(string token) => $"jwt:token:access:{token}";
116-
117-
/// <summary>
118-
/// 获取绑定刷新令牌缓存键
119-
/// </summary>
120-
/// <param name="token">刷新令牌</param>
121-
private static string GetBindRefreshTokenKey(string token) => $"jwt:token:bind:{token}";
122-
123-
/// <summary>
124-
/// 获取绑定用户设备令牌缓存键
125-
/// </summary>
126-
/// <param name="userId">用户标识</param>
127-
/// <param name="clientType">客户端类型</param>
128-
private static string GetBindUserDeviceTokenKey(string userId, string clientType) =>
129-
$"jwt:token:bind_user:{userId}:{clientType}";
32+
/// <inheritdoc />
33+
protected override async Task<T> GetAsync<T>(string key) => await _cache.GetAsync<T>(key);
13034
}
13135
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
4+
// ReSharper disable once CheckNamespace
5+
namespace Bing.Permissions.Identity.JwtBearer
6+
{
7+
/// <summary>
8+
/// Jwt令牌存储器基类
9+
/// </summary>
10+
public abstract class JsonWebTokenStoreBase : IJsonWebTokenStore
11+
{
12+
/// <inheritdoc />
13+
public async Task<RefreshToken> GetRefreshTokenAsync(string token) => await GetAsync<RefreshToken>(GetRefreshTokenKey(token));
14+
15+
/// <inheritdoc />
16+
public async Task SaveRefreshTokenAsync(RefreshToken token) => await AddAsync(GetRefreshTokenKey(token.Value), token, token.EndUtcTime.Subtract(DateTime.UtcNow));
17+
18+
/// <inheritdoc />
19+
public async Task RemoveRefreshTokenAsync(string token)
20+
{
21+
if (!await ExistsAsync(GetRefreshTokenKey(token)))
22+
return;
23+
await RemoveAsync(GetRefreshTokenKey(token));
24+
if (!await ExistsAsync(GetBindRefreshTokenKey(token)))
25+
return;
26+
var accessToken = await GetAsync<JsonWebToken>(GetBindRefreshTokenKey(token));
27+
await RemoveAsync(GetBindRefreshTokenKey(token));
28+
await RemoveTokenAsync(accessToken.AccessToken);
29+
}
30+
31+
/// <inheritdoc />
32+
public async Task<JsonWebToken> GetTokenAsync(string token) => await GetAsync<JsonWebToken>(GetTokenKey(token));
33+
34+
/// <inheritdoc />
35+
public async Task RemoveTokenAsync(string token)
36+
{
37+
if (!await ExistsAsync(GetTokenKey(token)))
38+
return;
39+
await RemoveAsync(GetTokenKey(token));
40+
}
41+
42+
/// <inheritdoc />
43+
public async Task SaveTokenAsync(JsonWebToken token, DateTime expires)
44+
{
45+
await AddAsync(GetTokenKey(token.AccessToken), token, expires.Subtract(DateTime.UtcNow));
46+
await AddAsync(GetBindRefreshTokenKey(token.RefreshToken), token, expires.Subtract(DateTime.UtcNow));
47+
}
48+
49+
/// <inheritdoc />
50+
public async Task<bool> ExistsTokenAsync(string token) => await ExistsAsync(GetTokenKey(token));
51+
52+
/// <inheritdoc />
53+
public async Task BindUserDeviceTokenAsync(string userId, string clientType, DeviceTokenBindInfo info, DateTime expires) =>
54+
await AddAsync(GetBindUserDeviceTokenKey(userId, clientType), info, expires.Subtract(DateTime.UtcNow));
55+
56+
/// <inheritdoc />
57+
public async Task<DeviceTokenBindInfo> GetUserDeviceTokenAsync(string userId, string clientType) =>
58+
await GetAsync<DeviceTokenBindInfo>(GetBindUserDeviceTokenKey(userId, clientType));
59+
60+
/// <summary>
61+
/// 添加
62+
/// </summary>
63+
/// <typeparam name="T">对象类型</typeparam>
64+
/// <param name="key">键名</param>
65+
/// <param name="value">值</param>
66+
/// <param name="expiration">过期时间</param>
67+
protected abstract Task AddAsync<T>(string key, T value, TimeSpan? expiration = null);
68+
69+
/// <summary>
70+
/// 移除指定键
71+
/// </summary>
72+
/// <param name="key">键名</param>
73+
protected abstract Task RemoveAsync(string key);
74+
75+
/// <summary>
76+
/// 是否存在指定键
77+
/// </summary>
78+
/// <param name="key">键名</param>
79+
protected abstract Task<bool> ExistsAsync(string key);
80+
81+
/// <summary>
82+
/// 获取数据
83+
/// </summary>
84+
/// <typeparam name="T">对象类型</typeparam>
85+
/// <param name="key">键名</param>
86+
protected abstract Task<T> GetAsync<T>(string key);
87+
88+
/// <summary>
89+
/// 获取刷新令牌缓存键
90+
/// </summary>
91+
/// <param name="token">刷新令牌</param>
92+
protected static string GetRefreshTokenKey(string token) => $"jwt:token:refresh:{token}";
93+
94+
/// <summary>
95+
/// 获取访问令牌缓存键
96+
/// </summary>
97+
/// <param name="token">访问令牌</param>
98+
protected static string GetTokenKey(string token) => $"jwt:token:access:{token}";
99+
100+
/// <summary>
101+
/// 获取绑定刷新令牌缓存键
102+
/// </summary>
103+
/// <param name="token">刷新令牌</param>
104+
protected static string GetBindRefreshTokenKey(string token) => $"jwt:token:bind:{token}";
105+
106+
/// <summary>
107+
/// 获取绑定用户设备令牌缓存键
108+
/// </summary>
109+
/// <param name="userId">用户标识</param>
110+
/// <param name="clientType">客户端类型</param>
111+
protected static string GetBindUserDeviceTokenKey(string userId, string clientType) =>
112+
$"jwt:token:bind_user:{userId}:{clientType}";
113+
}
114+
}

version.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<VersionMajor>2</VersionMajor>
44
<VersionMinor>2</VersionMinor>
55
<VersionPatch>0</VersionPatch>
6-
<VersionQuality>20211014-1</VersionQuality>
6+
<VersionQuality>20211122-1</VersionQuality>
77
<VersionPrefix>$(VersionMajor).$(VersionMinor).$(VersionPatch)</VersionPrefix>
88
<VersionSuffix>preview-$(VersionQuality)</VersionSuffix>
99
</PropertyGroup>

0 commit comments

Comments
 (0)