【问题标题】:Azure OAuth2 fails with Angular HashLocationStrategyAzure OAuth2 因 Angular HashLocationStrategy 失败
【发布时间】:2020-05-26 14:42:59
【问题描述】:

这是Angular App Hosting Azure Storage Container - Azure Authentication Callback and Routing fails 的后续问题。

总结:

我想在 Azure 存储帐户上托管我的 Angular 8 应用程序。为了使路由工作,我必须打开 HashLocationStrategy。这个策略在路由前加上这样的标签:https://<projectname>.z6.web.core.windows.net/#/auth/login

路由现在可以正常工作,但 Azure OAuth2 进程也使用井号标签将访问令牌信息添加到基本 URL:<baseurl>/<callbackurl>#access_token=eyJ0eXAiOiJKV1Q...。 不使用 HashLocationStrategy 的路由是这样的(回调路由是/auth/callback):

https://<projectname>.z6.web.core.windows.net/auth/callback#access_token=eyJ0eXAiOiJKV1Q...

使用 HashLocationStrategy 应该是这样的:

https://<projectname>.z6.web.core.windows.net/#/auth/callback#access_token=eyJ0eXAiOiJKV1Q...

但它的作用是这样的:

https://<projectname>.z6.web.core.windows.net/#access_token=eyJ0eXAiOiJKV1Q...

它只是吞下回调 url 部分并将 access_token 部分直接添加到基本 url 后面。重定向失败。

有没有办法让 Azure OAuth2 与 HashLocationStrategy 一起工作?

【问题讨论】:

    标签: angular oauth-2.0 azure-active-directory azure-blob-storage hash-location-strategy


    【解决方案1】:

    我没有调查您问题的所有方面,也不需要利用 HashLocationStrategy,但在 S3 存储桶上,我们已指定自定义 404 页面指向 index.html 文件,类似于 Angular 中的建议Deployment 用于静态 GitHub 页面的文档。

    在Azure的Static website hosting in Azure Storage页面中,表示可以指定自定义404页面。您也可以尝试指定 index.html 文件。这有效地“激活”了非 URL 可重写托管上的 Angular 路由器 - 至少这在 S3 静态站点托管上有效。

    【讨论】:

    • 感谢您的回答。您添加了两次相同的链接。你能修复 Angular 部署链接吗?
    • 当然,我修复了链接。
    • 非常感谢!复制 index.html 并将副本重命名为 404.html 就可以了 :-) 它有效,哇哦!
    【解决方案2】:

    使用 &amp;response_mode=query 代替默认的 fragment

    https://docs.microsoft.com/en-us/azure/active-directory/azuread-dev/v1-protocols-openid-connect-code#send-the-sign-in-request

    GET https://login.microsoftonline.com/{tenant}/oauth2/authorize?
    client_id=6731de76-14a6-49ae-97bc-6eba6914391e
    &response_type=id_token
    &redirect_uri=https://<projectname>.z6.web.core.windows.net/auth/callback // escape this..
    &response_mode=query
    &scope=openid
    &state=12345
    &nonce=7362CAEA-9CA5-4B43-9BA3-34D7C303EBA7
    

    您的回复现在应该如下所示:

    https://<projectname>.z6.web.core.windows.net/auth/callback?access_token=eyJ0eXAiOiJKV1Q...
    

    【讨论】:

    • 感谢您的回答。不幸的是,这不起作用:“请求令牌时,应用程序请求了不受支持的模式“查询”。
    • 我的错,这不适用于 SPA。它仅适用于授权代码流......很高兴其他人能够帮助您
    【解决方案3】:

    恐怕你想把方形钉子放在圆孔里!

    您尝试使用 HashLocationStrategy,因为在将 Azure 存储用作 Web 服务器时,您无法将 Angular 路由重定向到 index.html

    但是,您使用的是 OAuth,它始终在 URL 片段中提供令牌。这是为了使access_token 远离应用服务器,因为浏览器在从身份提供者的重定向中接收到它之后根本不发送它。

    我没有看到任何解决方法可以帮助您实现您的目标,恐怕您必须将应用程序托管在“支持 URL 重写”的网络服务器上。

    【讨论】:

    • 所以不可能将 OAuth2 与托管在 Azure 存储上的 Angular 应用程序一起使用?
    • 我没有花时间去探索所有的可能性,但我强烈怀疑这是可能的
    猜你喜欢
    • 2015-02-11
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 2022-01-22
    相关资源
    最近更新 更多