我正在使用Google通过OAuth2对用户进行身份验证。该网站内置于Angular 5中,并托管在Azure应用服务(IIS)中。当google对用户进行身份验证时,它将发送回包含一些URI的URL:
https://domain.azurewebsites.net/membership/oauth2?code=<authentication code>&scope=openid%20email%20https://www.googleapis.com/auth/plus.me%20https://www.googleapis.com/auth/userinfo.email
。
如您所见,在&scope
之后,有2个URI。 azure网站返回错误,表明
您要查找的资源已被删除,名称已更改或暂时不可用。
如果我从&scope
开始剥离查询字符串,它就可以正常工作。
我尝试使用重写规则在web.config中剥离该部分:
<rule name="Remove paging parameters" stopProcessing="true">
<match url="^(.*)\/membership\/oauth2(.*)$" />
<conditions trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="^(.*)(scope=.+)(.*)$" />
</conditions>
<action type="Redirect" url="{C:1}{C:3}" appendQueryString="false" />
</rule>
但是,什么也没发生。任何帮助将不胜感激。
侧面说明:一切都可以在localhost中正常运行,因为服务于Angular站点的是nodejs。该问题由IIS提供,在Azure App Service中引起。
答案 0 :(得分:0)
对于以后遇到相同问题的任何人,我在this的@kamranicus回答之后解决了这个问题。该帖子中显示的正确重写URL如下:
<rule name="Google Login - Remove scope parameter" stopProcessing="true">
<match url="google/redirect/url(.*)?$" />
<conditions trackAllCaptures="true">
<add input="{QUERY_STRING}" pattern="(.*)(&?scope=.+&?)(.*)" />
</conditions>
<action type="Rewrite" url="google/redirect/url?{C:1}{C:3}" appendQueryString="false" />
</rule>