Я отвечаю за разработку кроссплатформенного приложения, которое должно входить в систему с помощью OpenID. Это приложение разработано на Xamarin.Forms, но мне нужно перенести его на MAUI. Для входа в приложение я использую библиотеку IdentityModel.OidcClient. Сервер аутентификации полностью функционален. Я не тот, кто занимается разработкой и обслуживанием сервера.
Приложение Xamarin.Forms может без проблем войти в систему и получить полные учетные данные: токен доступа, токен обновления, срок действия, утверждения... Я использую версию библиотеки IdentityModel.OidcClient 5.2.1. Процесс аутентификации следует шагам, описанным по этой ссылке: Аутентификация в формах Xamarin с использованием Open Identity Connect и OAuth.
Сейчас я пытаюсь перенести этот процесс в MAUI, используя последнюю версию библиотеки (6.0.0). Для этого первое, что я сделал, это скачал пример кода для MAUI и изменил только следующее:
MauiProgram.cs: параметры OIDC (Authority, ClientId, Scope, RedirectUri)
// setup OidcClient
builder.Services.AddSingleton(new OidcClient(new()
{
Authority = "https://www.realdomain.es/openid/more/path/",
ClientId = "myclientid",
Scope = "openid",
RedirectUri = "myscheme://localhost",
Browser = new MauiAuthenticationBrowser()
}));
MauiAuthenticationBrowser.cs: RequestUrl (то же, что и RedirectUri)
var url = new RequestUrl("myscheme://localhost")
.Create(new Parameters(result.Properties));
WebAuthenticationCallbackActivity.cs: CALLBACK_SCHEME.
const string CALLBACK_SCHEME = "myscheme";
При запуске приложения на устройстве Android и входе в систему браузер не открывается, и я получаю следующую ошибку:
Несанкционированный: не удалось отправить параметры авторизации.
Я не могу найти ничего связанного с этой ошибкой. Кто-нибудь знает, что может произойти?
Я поискал сообщение об ошибке в исходном коде библиотеки и нашел следующий журнал:
_logger.LogDebug("The IdentityProvider contains a pushed authorization request endpoint. Automatically pushing authorization parameters. Use DisablePushedAuthorization to opt out.");
Итак, решение состоит в том, чтобы добавить DisablePushedAuthorization = true
в параметры OidcClient:
// setup OidcClient
builder.Services.AddSingleton(new OidcClient(new()
{
Authority = "https://www.realdomain.es/openid/more/path/",
ClientId = "myclientid",
Scope = "openid",
RedirectUri = "myscheme://localhost",
Browser = new MauiAuthenticationBrowser(),
DisablePushedAuthorization = true // To avoid error > Failed to push authorization parameters
}));