带有令牌和签名的角度认证

Posted

技术标签:

【中文标题】带有令牌和签名的角度认证【英文标题】:angular authentication with token and signature 【发布时间】:2018-08-15 06:51:02 【问题描述】:

我有graphql-go api 使用身份验证,当我测试它时它已经工作了 卷曲

curl \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Token: someS3cr3tT0ken" \
  -H "Signature: FAC2CA55E128AB2E399474200121DB19442324D7DFF40A919865130DC1A2409" \
  --data '"transaction_id": "123", "query": "query validate(phonenumber:\"XXXXXXXXX\") request_id" ' \
  http://localhost:6060/validate

响应应该是:

"data":"validate":"request_id":"22421462-4a3e-43c7-b188-57b6fe1c5575"

但我想用 apollo 客户端以角度实现它。所以,从本质上讲,是否可以将上面的curl 命令转换为角度http 请求...? 我已经尝试过使用拦截器并克隆http请求并修改标头,但我只能设置headers: request.headers.set("Authorization", "someS3cr3tT0ken"然后我将第二个拦截器与headers: request.headers.set("Signature", "FAC2CA55E128AB2E399474200121DB19442324D7DFF40A919865130DC1A2409"结合起来,当我这样做时它给了我400 badRequest这是一个错误当上面的任何一个参数curl 不正确时,服务器给我的响应是,我实际上只是在黑暗中拍摄,并且真的不知道如何将3 Header parameter 设置为角度,我发现的大部分资源是到getToken from localStorage 这在我的情况下不起作用,因为我无法提供Header signature

更新 这是我的拦截器:

@Injectable()
export class graphqlInterceptor implements HttpInterceptor
    intercept(request: HttpRequest<any> , next: HttpHandler)
        const newRequest = request.clone(
        headers: request.headers.set("Token", "someS3cr3tT0ken")
       // or
      // headers: request.headers.set("Authorization","someS3cr3tT0ken")
      //neither of the option above are working.
        return next.handle(newRequest)

然后我创建第二个拦截器来分配 Signature: ,,

这是上面实现的结果.. 我知道你会认为这是来自服务器的 CORS 问题,但是如果我将 Token 更改为 Authorization 响应更改为错误请求

这里是详细信息 XHR

谢谢。 .

【问题讨论】:

你能提供你的拦截器的代码吗?新的 HttpHeaders 是不可变的,每次设置新的标头值时,都会获得新的引用。 angular.io/api/common/http/HttpHeaders 感谢@SamiAI90 的回复,我已经更新了我的问题。 。请检查一下。 . 请提供第二个拦截器的代码、来自浏览器开发工具的http请求截图和完整的错误响应。这样我们就可以看到发送了哪些标头。 【参考方案1】:

我的团队建议我需要将 express.js 放在中间,所以从 angular -&gt; req 到 express 然后处理 req 并将其传递给 graphql-server 并且它可以工作。

【讨论】:

以上是关于带有令牌和签名的角度认证的主要内容,如果未能解决你的问题,请参考以下文章

使用 jwt 令牌认证识别用户

令牌认证和 SSL

带有令牌认证的 NSURLSession

支持 JWT 密钥轮换的承载令牌认证的 Owin 中间件

Web API 2,令牌认证和授权

为啥 JWT 是无状态认证?