JWT AuthProvider 是发布它基于用户会话填充的 JWT 令牌的原因。您可以在令牌中添加自己的元数据并使用CreatePayloadFilter and PopulateSessionFilter 进行检查。
JWT is enabled 在 AngularJS http://techstacks.io 示例中只需在用户成功通过其 OAuth 提供程序进行身份验证后调用 /session-to-token,例如:
$http.post("/session-to-token");
这会将他们当前经过身份验证的会话转换为 JWT 令牌,用于未来的后续请求。
同样,JWT 也用于 http://gistlyn.com,它使用 Customized JwtAuthProvider 将 Github OAuth 访问令牌密钥嵌入到 JWT 令牌中,然后使用 PopulateSessionFilter 从 JWT 令牌中提取它并将其填充回用户中会话:
appHost.Plugins.Add(new AuthFeature(() => new AuthUserSession(),
new IAuthProvider[] {
new GithubAuthProvider(appHost.AppSettings),
//Use JWT so sessions survive across AppDomain restarts, redeployments, etc
new JwtAuthProvider(appHost.AppSettings)
{
CreatePayloadFilter = (payload, session) =>
{
var githubAuth = session.ProviderOAuthAccess.Safe()
.FirstOrDefault(x => x.Provider == "github");
payload["ats"] = githubAuth != null
? githubAuth.AccessTokenSecret : null;
},
PopulateSessionFilter = (session, obj, req) =>
{
session.ProviderOAuthAccess = new List<IAuthTokens>
{
new AuthTokens { Provider = "github", AccessTokenSecret = obj["ats"] }
};
}
},
}));
在用户使用 JavaScript's new fetch API 通过 Github OAuth 进行身份验证后,Gistlyn 使用与 TechStacks 类似的方法来使用 JWT 令牌 by calling /session-to-token
fetch("/session-to-token", { method:"POST", credentials:"include" });
对于其他示例,您可以查看 JWT RSA Tests which uses CreateJwtPayload,其中显示了在代码中手动创建 JWT 令牌的示例。