从web.config中的querystring中剥离URL

时间:2018-11-05 02:05:23

标签: angular azure web-config azure-web-app-service

我正在使用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中引起。

1 个答案:

答案 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="(.*)(&amp;?scope=.+&amp;?)(.*)" />
   </conditions>
   <action type="Rewrite" url="google/redirect/url?{C:1}{C:3}" appendQueryString="false" />
</rule>