【问题标题】:Chrome: How to get ajax request to work with kerberos if not already authenticatedChrome:如果尚未经过身份验证,如何获取 ajax 请求以使用 kerberos
【发布时间】:2013-07-25 21:47:01
【问题描述】:

我们有一个使用 Kerberos 保护的 REST API。托管在其他地方的是调用此 API 的 web 应用。

如果您直接导航到 API,则身份验证工作正常并返回 cookie。然后 webapp 就可以正常工作了,因为它有一个用于 API 根 URI 的 cookie。

但是,如果您导航到 web 应用程序并使用 AJAX 向 API 发出 HTTP GET 请求,则该请求将返回 401: Unauthorized 以及 WWW-Authenticate:Negotiate。如果我导航到同一个地址,chrome 会协商并获得身份验证,但在这种情况下它会停止。

有各种丑陋的 hack 来解决这个问题,例如创建一个 IFRAME 来获取 API 的某些部分,或者将用户重定向到 API 并使用 307 将用户反弹回来,但这些显然不是最佳的.

它在 IE7 中运行良好。

处理这个问题的正确方法是什么?

【问题讨论】:

    标签: ajax google-chrome kerberos


    【解决方案1】:

    我发现了这个问题。 REST API 有一个额外的身份验证层,它使用“授权”http 标头来设置 api-key。移除此安全层后,一切正常。

    我会留下这个问题,以防其他人犯同样的错误。

    【讨论】:

    • “从授权标头中清除 API 之后”实际上是什么意思?我有一个类似的问题。使用 chrome 浏览到 secure.domain/api 我使用 kerberos 成功登录,但是当我使用 jQuery 的 .ajaxotherdomain/webapp 加载它时,我得到一个 401 Authorization required。我认为 Access-Control-Allow-* 标头已覆盖,但现在 Chrome 不会自动登录。您的解决方案将如何应用?
    • 我更新了答案。我的问题是由于使用 API 密钥的自定义身份验证层。摆脱该层解决了这个问题。听起来您遇到了不同的问题。
    • 你是怎么去掉那层的?您是否添加了一个带有 Authorization null 的新 jquery ajax 标头(以清除它)?
    • 额外的层被挂在了 Spring 中。基本上这只是一个意外,因为我们试图两次使用“授权”http 标头用于两种不同的目的(apiKey 与 kerberos)。
    猜你喜欢
    • 2018-10-19
    • 2016-02-06
    • 2021-07-05
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多