向每个请求发送一个jsonWebToken到某个网页

时间:2016-08-07 19:42:22

标签: javascript authentication web browser

我正在开发一个Web应用程序并且在身份验证方面存在一些问题,我使用json web令牌。该应用程序应该关闭,因此即使您尝试访问其主页,它也应该询问您的凭据。但是,我无法弄清楚如何在地址栏输入http://localhost:3000/时发送令牌。我考虑过这一点,并认为最简单的方法就是配置浏览器以便它存储该令牌并将其与每个请求一起发送到应用程序的域名(例如http://localhost:3000/ ...将发送令牌,无论......是)。我在网上搜索过,但没有找到符合我需要的答案。

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

您是在构建单页面应用程序(SPA)还是服务器端Web应用程序?

在单页面应用程序中,您通常可以匿名检索主页面,而页面加载事件处理程序中的JavaScript会触发身份验证流程。然后,返回的令牌通过JavaScript发送显式,并向服务器发出每个请求。

在服务器端Web应用程序(如ASP.NET MVC)中,当用户通过将其重定向到身份验证端点来导航到主页时,将触发身份验证流。用户成功验证后,会发回一个Cookie,该浏览器会随着浏览器的每个请求自动发送。

答案 1 :(得分:0)

这取决于您使用的技术。如果您在前端使用Javascript(AngularJS,Vuejs甚至React),那么您可以通过标头或查询字符串发送令牌,如下所示:

function createRequest(){

    var request = new Request();  // create an actual request from your whatever library you are using

    request.headers.set('Authorization', 'Bearer ' + localStorage.getItem('id_token')); // add the header

    return request; 
}

因此,对于向服务器发出的每个请求,令牌都作为标头附加。

如果您使用的是像PHP这样的服务器端技术......您可以使用Guzzle客户端发出请求并将令牌附加到每个请求。其示例实现如下:


    /**
     * Instantiate Guzzle Client and prepare request for http operations
     * @return none
     */
    private function prepareRequest()
    {
        $this->client = new Client(['base_uri' => self::baseURL]);
    }
    /**
     * Perform a GET request
     * @param  string $relativeUrl
     * @return none
     */
    private function performGetRequest($relativeUrl)
    {
        $this->response = $this->client->request('GET', $relativeUrl, [
            'auth' => [$this->publicKey, $this->accessToken]
        ]);
    }
    /**
     * Perform a POST request
     * @param  string $relativeUrl
     * @param  array $data
     * @return none
     */
    private function performPostRequest($relativeUrl, $data)
    {
        $this->response = $this->client->request('POST', $relativeUrl, [
            'auth' => [$this->publicKey, $this->accessToken],
            'form_params' => $data
        ]);
    }

令牌密钥作为auth密钥的值附加到每个请求!

如果您正在寻找其他资源或完整的代码实施,您可能需要查看以下帖子:

您还可以找到有关Aurelia和Vuejs RESTful API实施的帖子以及身份验证。

我希望这些信息有所帮助。干杯!