我想知道,加密和解密 OAuth2 中使用的 Bearer 令牌和 Asp.Net Identity 中的代码的内部过程是什么。
一旦服务器接收到一个令牌,它就能够检索 UserId、Roles、Claims 和其中的所有属性。那么,承载令牌是如何解密的呢?什么是加密算法和使用的代码?
我想知道,加密和解密 OAuth2 中使用的 Bearer 令牌和 Asp.Net Identity 中的代码的内部过程是什么。
一旦服务器接收到一个令牌,它就能够检索 UserId、Roles、Claims 和其中的所有属性。那么,承载令牌是如何解密的呢?什么是加密算法和使用的代码?
你从哪里获得令牌?令牌很少被加密(有时是加密的),但它们总是会被编码(和签名)。OpenID(OAuth2 之上的协议)使用 JWT。OAuth2(不是 OpenID)使用“不透明”令牌。
有关解码 JWT 的库,请参见http://jwt.io。
这是一个小的 Windows 窗体工具,它使用MachineKeyDataProtector
.
因此,如果您的应用程序托管在 IIS 中,那么您可以使用上述工具。
OAuth 2.0 Bearertoken 获得:
序列化成二进制格式
MachineKey 加密(应用自托管时使用 DPAPI 等)
Base64 编码
这是一个简短的答案,我有时间。OAuthBearerTokenOptions 包含创建令牌所需的代码。它必须在您自己的启动中配置。
app.UseOAuthBearerAuthentication(OAuthBearerOptions);
鉴于...
var ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
var currentUtc = new SystemClock().UtcNow;
ticket.Properties.IssuedUtc = currentUtc;
ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(expirationMinutes));
string accessToken = oAuthBearerAuthenticationOptions.AccessTokenFormat.Protect(ticket);