Убрать URL из строки запроса в web.config - PullRequest
0 голосов
/ 05 ноября 2018

Я использую Google для аутентификации пользователей через OAuth2. Сайт построен в Angular 5 и размещен в службе приложений Azure (IIS). Когда Google аутентифицирует пользователя, он отправляет обратно URL, который содержит несколько URI:

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 все работает нормально, так как это nodejs, который обслуживает сайт Angular. Проблема возникает в службе приложений Azure, так как она обслуживается IIS.

1 Ответ

0 голосов
/ 05 ноября 2018

Для тех, кто столкнется с такой же проблемой в будущем, я решил следующее этот ответ @ 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>
...