作者:白云朵朵12 | 来源:互联网 | 2022-12-05 19:36
我想将PWA功能添加到我的App Service中。它是用C#ASP.NET编写的。但是,Chrome无法访问清单,而Edge甚至都没有获得图标(这可能是一个单独的问题)。其他桌面浏览器显然还没有PWA功能。
Chrome是唯一请求清单的浏览器。这是控制台中的错误消息:
Failed to load https://login.windows.net/b79fd714-9c54-449d-b377-3b59deb2d3b6/oauth2/authorize?response_type=code+id_token&redirect_uri=https%3A%%{myappname}.azurewebsites.net%.auth%2Flogin%2Faad%2Fcallback&client_id=67bedd5c-5478-44ec-ba13-85061c71114b&scope=openid+profile+email&response_mode=form_post&nOnce=df52b6dc64dd4c3393957675f365ae93_20180903064438&state=redir%3D%252Fwebmanifest.json: Redirect from 'https://login.windows.net/b79fd714-9c54-449d-b377-3b59deb2d3b6/oauth2/authorize?response_type=code+id_token&redirect_uri=https%3A%%{myappname}.azurewebsites.net%.auth%2Flogin%2Faad%2Fcallback&client_id=67bedd5c-5478-44ec-ba13-85061c71114b&scope=openid+profile+email&response_mode=form_post&nOnce=df52b6dc64dd4c3393957675f365ae93_20180903064438&state=redir%3D%252Fwebmanifest.json' to 'https://login.microsoftonline.com/b79fd714-9c54-449d-b377-3b59deb2d3b6/oauth2/authorize?response_type=code+id_token&redirect_uri=https%3A%%{myappname}.azurewebsites.net%.auth%2Flogin%2Faad%2Fcallback&client_id=67bedd5c-5478-44ec-ba13-85061c71114b&scope=openid+profile+email&response_mode=form_post&nOnce=df52b6dc64dd4c3393957675f365ae93_20180903064438&state=redir%3D%252Fwebmanifest.json' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://{myappname}.azurewebsites.net' is therefore not allowed access.
我在App Service中启用的AAD身份验证似乎正在干扰浏览器的清单请求。
我知道要快速解决此问题,Microsoft必须将此应用程序添加到他们的CORS中。这当然不是我期望发生的事情。但是,我需要让浏览器访问清单的其他方法。
我已将必要的mimeMaps添加到了web.config
。
这是我的顶部Head
:
如果我使用某种AJAX请求,那么我将遵循网络上的其中一个教程。但是,据我所知,我几乎没有控制头。
注意:我的应用名称中所有出现的都已替换为{myappname}。我真的希望这些令牌是临时的...
在上面的教程链接中,有一段相关的文本比我自己的问题更好地解释了我的问题:
在用户向Azure AD进行身份验证以登录到应用程序后的典型情况下,Azure App Service为与客户端浏览器进行身份验证的会话设置名为“ AppServiceAuthSession”的COOKIE。Web应用程序可以使用XMLHttpRequest / AJAX请求来实现应用程序的各种功能,并且发送到Azure App Service的请求还将包含AppServiceAuthSession COOKIE。当请求中不存在此COOKIE时,Azure App Service会将请求重定向到Azure AD进行登录。由于目标域更改,并且默认情况下Azure AD不允许跨源请求,因此此重定向导致AJAX请求成为CORS请求。
在我的情况下,浏览器正在发送不包含必需标头的清单的请求。
1> TimHayes..:
我只是在这里使用它,但是您可以尝试crossOrigin
在清单链接上使用该属性,如下所示:
以下是一些可能有用的相关链接。根据第一页,在请求manifest.json时,默认不传递用户凭证:
https://thatemil.com/blog/2018/02/21/pwa-basic-auth/
https://github.com/w3c/manifest/issues/535
https://developer.mozilla.org/zh-CN/docs/Web/HTML/CORS_settings_attributes
请让我知道是否有帮助。
我很高兴它成功了!我以前没有亲自遇到过这个问题,但是我觉得这只是时间问题...所以我将把这些知识打包起来以备后用。