【问题标题】:Missing SetToken and SetTokenCookie on JsonServiceClient from TypeScript来自 TypeScript 的 JsonServiceClient 上缺少 SetToken 和 SetTokenCookie
【发布时间】:2017-03-10 21:56:58
【问题描述】:

使用 TypeScript 中的 JsonServiceClient 调用 ServiceStack 时,我们无法分配 BearerToken。如本问题所述,似乎缺少 SetCookie 和 SetCookieToken 方法:

ServiceStack Javascript JsonServiceClient missing properties

我们尝试了那里描述的解决方案:

this.client.headers.append("Authorization" , "Bearer " + jwtToken);

但是当我们尝试这个时,我们得到一个 HTTP 400: Bad Request

我们如何将 JavaScript 中的 JsonServiceClient 与 BearerToken 一起使用?

【问题讨论】:

  • 您能发布完整的 HTTP 响应标头吗? (例如通过 Fiddler 或 Chrome WebInspector)。

标签: servicestack


【解决方案1】:

我刚刚添加了一个明确的setBearerToken() API(在 v0.0.28 中),它添加了承载令牌 HTTP 标头:

setBearerToken(token:string): void {
    this.headers.set("Authorization", "Bearer " + token);
}

并确认它在这个node/browser compatible test 中有效:

var client = new JsonServiceClient("http://test.servicestack.net");
client.setBearerToken(jwtToken);
var success = await client.post(new Authenticate());

您的问题与 JWT 无关。您应该检查您的 HTTP 响应标头以了解更多信息。 400 响应是一个错误的请求异常,您将收到一个 401 未授权异常的未授权响应。

Token Cookie vs Bearer Token

另请注意,在ss=jwt Cookie 中传递 JWT 令牌的 setTokenCookie() 与添加到 Authorization HTTP 请求标头的承载令牌无关。

如果您通过不同的身份验证提供程序进行身份验证时您的 JWT 配置正确,例如:

var request = new Authenticate();
request.provider = "credentials";
request.userName = userName;
request.password = password;
var authResponse = await client.post(request);
var jwtToken = authResponse.bearerToken;

JWT 令牌将填充到 authResponse.bearerToken 中,您可以将其与 client.setBearerToken() 一起使用以添加 HTTP 请求标头。认证后也可以去/auth查看JWT BearerToken。

如果 bearerToken 未填充,则 JWT Provider 不会为该请求填充它。如果您不使用https,则需要确保RequireSecureConnection=false 允许它通过http 工作。

如果您愿意,您可以改为告诉 ServiceStack 您要使用 JWT Cookie,您可以在验证时指定:

var request = new Authenticate();
request.useTokenCookie = true;

在这种情况下,JWT 令牌不是在 bearerToken 中返回,而是填充在 ss=tok HttpOnly Cookie 中,JavaScript 无法直接访问该 Cookie,但将在以后的每个 ServiceClient 请求中透明地发送。

【讨论】:

  • 感谢@mythz一如既往的大力支持。一旦我们按照您的建议更详细地检查了返回标头并发现抛出了异常,我们就能够将问题追溯到 JWT 中的“CreatedAt”有效负载,其格式是 ServiceStack 没有预料到的(字符串与 Unix 时间) .异常来自 UserAuthExtension 中的 PopulateFromMap 方法。添加辅助方法也很有用,可以在 JsonServiceClient 可用的不同平台上提供更一致的体验。
猜你喜欢
  • 2017-07-22
  • 2018-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
相关资源
最近更新 更多