如何使用ServiceStack的JwtAuthProvider发布和使用JWT

时间:2016-10-18 13:25:37

标签: c# servicestack jwt

查看ServiceStack的JwtAuthProvider documentation,看起来很多JWT功能都是开箱即用的。但是我真的需要看一些有用的例子。我在ServiceStack的示例目录中找不到任何内容。

我希望看到的是一个示例代码,显示:

  1. 如何使用某些声明发出令牌。
  2. 如何解码令牌并检查声明。
  3. 只使用一些" Hello world"服务。有没有人有一些显示这个或知道在哪里看的代码?

    理想情况下,签名会使用RSA,但现在这并不重要......

    感谢。

1 个答案:

答案 0 :(得分:2)

JWT AuthProvider是根据用户会话发布它填充的JWT令牌的内容。您可以在令牌中添加自己的元数据,并使用CreatePayloadFilter and PopulateSessionFilter进行检查。

AngularJS JWT is enabled示例中的

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"] }
            };
        } 
    },
}));

Gistlyn使用与TechStack类似的方法在用户使用by calling /session-to-token

对Github OAuth进行身份验证后使用JWT令牌JavaScript's new fetch API
fetch("/session-to-token", { method:"POST", credentials:"include" });

JWT Stateless Auth Tests

对于其他示例,您可以查看JWT RSA Tests which uses CreateJwtPayload,其中显示了在代码中手动创建JWT令牌的示例。