Запрос области действия wl.imap в приложении ASP.NET Core 2.0 приводит к «Предоставленный запрос должен включать входной параметр« область действия ».»ошибка - PullRequest
0 голосов
/ 31 мая 2019

Используя стандартный мастер Visual Studio 2017 (последняя версия), я создал приложение ASP.NET Core MVC 2.0 с отдельными учетными записями и включил поставщика Microsoft в Startup / ConfigureServices:

services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
    microsoftOptions.ClientId = "client";
    microsoftOptions.ClientSecret = "secret";
});

Это работает,Я могу войти в систему.

Теперь я могу добавить несколько областей действия, например:

microsoftOptions.Scope.Add("Mail.ReadWrite");
microsoftOptions.Scope.Add("Mail.Send");

, и все еще могу войти в систему.

Теперь я добавлю еще одну область действия

microsoftOptions.Scope.Add("wl.imap");

Мне это нужно для доступа к учетной записи пользователя через IMAP.Это приводит к ошибке 500, когда я перенаправлен обратно на https://localhost:44356/signin-microsoft?code=Mc2b68f4d-470d-feea-f844-2affc5a6c6a4&state=xxx

Exception: OAuth token endpoint failure: Status: BadRequest;Headers: Cache-Control: no-cache, no-store
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-Content-Type-Options: nosniff
x-ms-request-id: 57913256-87df-4564-892e-7d26c6502200
P3P: CP="DSP CUR OTPi IND OTRi ONL FIN"
Set-Cookie: fpc=AgXVFto7n3VFttLDS7F2OQzrCidiAgAAAC96g9QOAAAA; expires=Sun, 30-Jun-2019 19:40:33 GMT; path=/; secure; HttpOnly, x-ms-gateway-slice=prod; path=/; secure; HttpOnly, stsservicecookie=ests; path=/; secure; HttpOnly
Date: Fri, 31 May 2019 19:40:32 GMT
;Body: {"error":"invalid_scope","error_description":"AADSTS70011: The provided request must include a 'scope' input parameter.\r\nTrace ID: 57913256-87df-4564-892e-7d26c6502200\r\nCorrelation ID: 6c9a489c-7e5f-493b-816b-45772fa45209\r\nTimestamp: 2019-05-31 19:40:33Z","error_codes":[70011],"timestamp":"2019-05-31 19:40:33Z","trace_id":"57913256-87df-4564-892e-7d26c6502200","correlation_id":"6c9a489c-7e5f-493b-816b-45772fa45209"};

Я также пробовал несколько других областей wl. *, А также office.onenote_create с https://msdn.microsoft.com/en-us/windows/desktop/hh243646 - эффектто же самое - не повезло.

microsoftOptions.Scope.Add("wl.emails");

Я успешно использую эти области с аналогичным приложением ASP.NET Framework MVC5 (которое использует тот же client_id).Проблема относится только к версии .NET Core.

Запрос выполняется только в том случае, если я не добавляю области wl. *.

Когда я сравниваю версию .NET Core и .NET Framework (запросы на https://login.live.com/oauth20_authorize.srf в Fiddler), я вижу эту разницу:

.NET Core: GET /oauth20_authorize.srf?client_id=xxx&scope=https%3a%2f%2fgraph.microsoft.com%2fuser.read & redirect_uri = https% 3a% 2f% 2flocalhost% 3a44356% 2fsignin-microsoft & response_type = code & state = xxx

.NET Framework: GET /oauth20_authorize.srf?client_id=xxx&scope=wl.imap%20wl.email.offline_access & response_type = code & redirect_uri = http% 3A% 2F% 2Flocalhost% 3A7676% 2Fsignin-microsoft & state = xxx

.NET Основной запрос выше - это тот, который выполняется успешно, без добавления областей wl. *.Однако у него уже есть несколько областей применения, которые я не запрашивал.В то же время, в случае версии .NET Framework список областей не имеет никаких областей, кроме тех, которые я установил сам (wl. *).Таким образом, в случае ASP.NET Core его промежуточное программное обеспечение добавляет несколько областей действия (например, https://graph.microsoft.com).

Похоже, что поставщик Microsoft не может поддерживать одновременный запрос областей https://graph.microsoft.com и wl. *?

Я пытался добавить

microsoftOptions.Scope.Clear();

Но это делает процесс аутентификации неудачным, поскольку промежуточному программному обеспечению требуется область https://graph.microsoft.com для заполнения профиля пользователя. Интересно, что более старая версия .NET Framework могла получитьпрофиль без запроса какой-либо конкретной области.

Есть идеи, как можно запросить области wl. * в приложении ASP.NET Core 2.0?

РЕДАКТИРОВАТЬ 1:

Я также пыталсядобавление https://graph.microsoft.com/user.read к запрошенным областям в устаревшем приложении ASP.NET Framework (которое запрашивает wl.imap и другие области wl. *). Это работает там! Так что, похоже, сам сервер Microsoft не имеет проблем с этим,это что-то в приложении ASP.NET Core, которое не может с этим справиться. Но что именно ..

РЕДАКТИРОВАТЬ 2: Нет, оказывается, версии .NET Framework и .NET Core следуют по разным путям после https://login.live.com/oauth20_authorize.srf запрос.Версия .NET Framework - https://login.live.com/oauth20_token.srf (что работает), а версия .NET Core - https://login.microsoftonline.com/common/oauth2/v2.0/token (которая фактически возвращает error_description = AADSTS70011: предоставленный запрос должен включать входной параметр scope).,Затем приложение .NET Core возвращает ошибку 500.Тем не менее, я не знаю, как преодолеть это.

РЕДАКТИРОВАТЬ 3:

ОК, добавив

microsoftOptions.TokenEndpoint = "https://login.live.com/oauth20_token.srf"

сделали свое дело.Теперь я могу использовать специфичные для IMAP области, как в более старой версии .NET Framework приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...