Почему Chrome разрешает этот тихий Azure запрос авторизации OAuth, но не Firefox и Edge? - PullRequest
1 голос
/ 24 января 2020

Фон

  1. Webapp (SPA + WebAPI) использует Azure + OAuth + OpenID Connect для аутентификации и авторизации пользователя.
  2. OAuth Неявный поток.
  3. Когда срок действия маркера доступа истекает, я вызываю конечную точку авторизации OAuth Azure, чтобы молча запросить новый токен доступа.
  4. Конечная точка авторизации https://login.microsoftonline.com/ {идентификатор владельца } /oauth2/v2.0/authorize

Запрос авторизации

URL-адрес для выполнения запроса авторизации без вывода сообщений (отформатирован для удобства чтения)

https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize
?response_type=token id_token
&client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
&state=123
&scope=openid api://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/user_impersonation
&redirect_uri=https://my-app.azurewebsites.net/index.html
&nonce=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
&prompt=none

Ответ

Ответ всех трех браузеров - 302. Но заголовок местоположения в ответе отличается.

Chrome местоположение (отформатировано для удобства чтения)

https://my-app.azurewebsites.net/index.html
#access_token=...
&token_type=Bearer
&expires_in=3599
&scope=api://xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/user_impersonation
&id_token=...
&state=123
&session_state=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Край / Firefox местоположение

https://my-app.azurewebsites.net/index.html
#error=login_required
&error_description=AADSTS50058 A silent sign-in request was sent but no user is signed in. The cookies used to represent the users session were not sent in the request to Azure AD. This can happen if the user is using Internet Explorer or Edge and the web app sending the silent sign-in request is in different IE security zone than the Azure AD endpoint (login.microsoftonline.com). Trace ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxCorrelation ID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx Timestamp 2020-01-24 08:17:33
&error_uri=https://login.microsoftonline.com/error?code=50058
&state=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Сообщение об ошибке (от Edge / Firefox response)

A silent sign-in request was sent but no user is signed in. 
The cookies used to represent the users session were not sent in the request to Azure AD. 
This can happen if the user is using Internet Explorer or Edge 
and the web app sending the silent sign-in request is in different
IE security zone than the Azure AD endpoint (login.microsoftonline.com). 

Сообщение об ошибке URI https://login.microsoftonline.com/error?code=50058 равно

Session information is not sufficient for single-sign-on.
This means that a user is not signed in. 
This is a common error that's expected when a user is unauthenticated and has not yet signed in. 
If this error is encountered in an SSO context where the user has previously signed in, 
this means that the SSO session was either not found or invalid. 
This error may be returned to the application if prompt=none is specified

Файлы cookie

Я заметил, что файлы cookie, отправленные и полученные Chrome, отличаются от файлов cookie, отправленных и полученных Edge / Firefox.

Chrome запрос st cookie (17)

x-ms-gateway-slice=...; 
stsservicecookie=...; 
AADSSO=...; 
esctx=...; 
brcap=.; 
clrc=...; 
wlidperf=...; 
MSCC=...; 
ESTSAUTHLIGHT=...; 
ESTSSC=...;
ESTSAUTHPERSISTENT=...;
ESTSAUTH=...; 
ch=...; 
buid=...;
CCState=...;
SignInStateCookie=...;
fpc=...

Chrome ответные файлы cookie (11)

ESTSAUTHPERSISTENT=...; domain=.login.microsoftonline.com; expires=Thu, 23-Apr-2020 08:18:32 GMT; path=/; secure; HttpOnly; SameSite=None
ESTSAUTH=...; domain=.login.microsoftonline.com; path=/; secure; HttpOnly; SameSite=None
ESTSAUTHLIGHT=...; path=/; secure; SameSite=None
ch=...; domain=.login.microsoftonline.com; expires=Thu, 23-Apr-2020 08:18:32 GMT; path=/; secure; SameSite=None
ESTSSC=...; path=/; secure; HttpOnly; SameSite=None
buid=...; expires=Sun, 23-Feb-2020 08:18:32 GMT; path=/; secure; HttpOnly; SameSite=None
CCState=...; domain=.login.microsoftonline.com; expires=Sun, 23-Feb-2020 08:13:32 GMT; path=/; secure; HttpOnly; SameSite=None
SignInStateCookie=...; path=/; secure; HttpOnly; SameSite=None
fpc=...; expires=Sun, 23-Feb-2020 08:18:32 GMT; path=/; secure; HttpOnly; SameSite=None
x-ms-gateway-slice=...; path=/; SameSite=None; secure; HttpOnly
stsservicecookie=...; path=/; secure; HttpOnly; SameSite=None

Нет запроса файлов cookie в Edge / Firefox.

Edge / Firefox куки-файлы ответа (4)

buid=...; expires=Sun, 23-Feb-2020 08:24:39 GMT; path=/; secure; HttpOnly; SameSite=None
fpc=...; expires=Sun, 23-Feb-2020 08:24:39 GMT; path=/; secure; HttpOnly; SameSite=None
x-ms-gateway-slice=...; path=/; SameSite=None; secure; HttpOnly
stsservicecookie=...; path=/; SameSite=None; secure; HttpOnly

Версии

  • Chrome версия: 79.0.3945.130
  • Версия Edge: 44.18362.449.0
  • Firefox версия: 72.0.2

Вопросы

  1. Почему Chrome позволяет этому вызову https://login.microsoftonline.com молча запрашивать токен доступа, но на Firefox, и Edge вызов не удается?
  2. Почему Chrome включает файлы cookie вышеупомянутых запросов, но не Firefox и Edge?
...