使用 AspNet 4.6.2 生成访问令牌,使用任何 Auth 流(尝试过 Code Flow、Implicit Flow、Client Credentials Flow),使用AuthenticationTokenCreateContext
来自 的类Microsoft.Owin.Security.Infrastructure
,我观察到一些奇怪的行为。
我们已经实现了一个身份验证服务器,其中资源可以允许客户端请求某些范围,但是,始终返回一个令牌,其中包含客户端能够从该资源请求的所有范围。
相关代码为:
var accessTicket = new AuthenticationTicket(new ClaimsIdentity(identity), new AuthenticationProperties());
accessTicket.Properties.SetTicketType("access_token");
accessTicket.Properties.IssuedUtc = nowUtc;
accessTicket.Properties.SetNotBeforeUtc(nowUtc);
accessTicket.Properties.ExpiresUtc = nowUtc.Add(Options.AccessTokenLifetime);
accessTicket.Properties.SetClientId(clientId);
accessTicket.Properties.SetResource(resource);
accessTicket.Properties.SetTokenId(Guid.NewGuid().ToString());
accessTicket.Properties.SetScope(scope);
var accessTokenCreateContext = new AuthenticationTokenCreateContext(Context, Options.AccessTokenFormat, accessTicket);
await Options.AccessTokenProvider.CreateAsync(accessTokenCreateContext);
var accessToken = accessTokenCreateContext.Token;
if (string.IsNullOrEmpty(accessToken))
{
accessToken = accessTokenCreateContext.SerializeTicket();
}
一旦创建,accessTokenCreateContext.Ticket.Properties.GetScope()
返回预期的范围,但是一旦通过该SerializeTicket()
方法创建(JWT)accessToken,令牌就具有客户端能够从资源请求的所有范围。
为什么此方法使用不在票证中的范围序列化票证?