首页 > 解决方案 > 当使用 aqueduct 时,oauth 适合授权访问 html 页面

问题描述

我正在使用 Aqueduct 提供HTML页面,我希望访问页面的授权能够正常工作,而无需为每个链接手动设置带有 javascript 的授权标头。这是怎么做到的?

我认为可能的唯一方法是使用 cookie。我尝试将 OAuth Bearer 令牌放入 cookie 中,以便它随每个请求一起发送,但我试图将其从 cookie 偷偷带回请求标头(服务器端的标准授权方期望它)作为请求时卡住了标头是不可变的。

我是否必须编写新的授权方才能使用 cookie 中的令牌?我已经读过根本不应该将 cookie 与 OAuth 一起使用。那么该怎么做呢?当然,我错过了一些东西,因为这似乎是一种常见的需求。

另一个想法(仍然使用 cookie)是从服务器的 cookie 中提取令牌,并将请求转发回具有正确授权标头的(同一)服务器。

什么是渡槽网页授权最好的处理方式?

标签: htmloauthauthorizationaqueduct

解决方案


授权需要在标头中发送,并且浏览器不会为我执行此操作,除非不推荐使用 cookie。我想出的答案是应该检索 html 页面(减去内容),并使用 js 使用授权请求网页的内容,并在请求中包含授权标头。

我前进的道路是替换整个网页,因为我不想改变大部分工作。所以在一个包装器html页面中我这样做:

    var uri = NEWURI;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', uri);
    xhr.onreadystatechange = handler;
    xhr.responseType = 'text';

    var authorization = localStorage.getItem("authorization"); // setup by by login page
    if (authorization != null)
    {
      xhr.setRequestHeader('Authorization', authorization);
    }
    xhr.send();

然后在处理程序中我写了文件:

  if (this.readyState === this.DONE) {
    if (this.status === 200) {
      var newHTML = document.open("text/html", "replace"); 
            newHTML.write(this.response); 
            newHTML.close();

    } else if (this.status === 401)
    {

    }

推荐阅读