【问题标题】:How to get JWT bearer token from WebAPI with Safari as the client?如何以 Safari 作为客户端从 WebAPI 获取 JWT 不记名令牌?
【发布时间】:2017-05-18 21:39:48
【问题描述】:

概述

我有一个使用 JWT 令牌来保护端点的 WebApi 2.0 项目。当用户登录到我的 Web 应用程序时,会向 API 发出 AJAX 请求,API 会生成承载令牌并将其返回给用户,然后将其保存在 sessionStorage 客户端,以便可以向受保护的端点发出请求。

请注意,我的 Web 应用程序和 API 都使用 CORS 通过 https 托管。

问题

在使用 Firefox、Chrome、Internet Explorer 和 Edge 时,这一切都可以正常工作。但是,当我通过 iPhone 或 iPad 登录到我的 Web 应用程序时,API 甚至会被调用,因此不会返回任何令牌。这意味着我的 Web 应用程序无法从受保护的端点获取数据,这实际上使它有点没用!

研究

Https requests with Authorization not working via Safari

看起来上述问题中的用户至少从服务器获取了一个令牌,这比我目前得到的要多。

有没有人知道为什么会发生这种情况?

2017 年 5 月 1 日更新

只是为了让这个问题和答案更准确。这不是不记名令牌生成或消费的问题,只是 Safari 在不设置 async: false 的情况下实际上不会向我的 API 发出 AJAX 请求。

【问题讨论】:

    标签: ios asp.net-web-api safari jwt


    【解决方案1】:

    在拔掉头发一整天后,我终于想出了一个解决方案。

    对于遇到此问题的其他人,我修复它的方法是在我的请求中添加 async: false ,如下所示:

     $.ajax({
            type: 'POST',
            url: apiBase + 'OAuth/Token',
            data: loginData,
            async: false // Adding this fixed my issue.
        }).done(function (data) {
            sessionStorage.setItem("tokenKey", d.access_token);
        });
    

    【讨论】:

    • 您是否在请求和生成令牌功能中都删除了异步?
    猜你喜欢
    • 2021-07-12
    • 2016-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 2020-01-31
    • 2017-10-06
    • 1970-01-01
    相关资源
    最近更新 更多