【问题标题】:How to issue and consume JWT using ServiceStack's JwtAuthProvider如何使用 ServiceStack 的 JwtAuthProvider 发布和使用 JWT
【发布时间】:2017-02-27 19:20:56
【问题描述】:

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

我希望看到的示例代码显示:

  1. 如何发布带有一些声明的令牌。
  2. 如何解码令牌并检查声明。

只是使用一些“Hello world”服务。有没有人有一些代码可以显示这一点或知道在哪里看?

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

谢谢。

【问题讨论】:

    标签: c# servicestack jwt


    【解决方案1】:

    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 Stateless Auth Tests

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

    【讨论】:

    • 太好了,只是为了确保 - 我必须手动创建传递 jwt 的路线和方法,对吗?例如,还使用 ​​RequestFilterAttribute 进行验证?您是否有一些示例说明如何验证 authHeader?
    • @Werner JWT AuthProvider 本身提供several ways of retrieving the JWT Token
    • 神话,再次敬畏并被您的代码保存。谢谢。
    猜你喜欢
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    相关资源
    最近更新 更多