为什么SerializeTicket()返回令牌,该令牌具有资源允许客户端使用的所有范围

时间:2019-06-18 05:58:43

标签: asp.net security oauth-2.0 owin owin-security

使用AspNet 4.6.2通过任何Auth流(尝试过代码流,隐式流,客户端凭据流),使用AuthenticationTokenCreateContext中的Microsoft.Owin.Security.Infrastructure类来生成访问令牌,我观察到了一些奇怪的行为。

我们已经实现了Auth服务器,其中的资源可以允许客户端请求某些范围,但是,令牌始终会返回一个客户端可以从该资源请求的所有范围。

相关代码为:

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,令牌将具有客户端能够从中请求的所有范围资源。

为什么此方法将故障单与不在故障单中的作用域序列化?

1 个答案:

答案 0 :(得分:0)

这仅仅是对我的IDE的误解。我没有意识到VisualStudio并没有进入某些方法,我认为这是理所当然的,因为我看到它已经进入了其他方法。

对我的经验:需要学习更好地使用我的工具。