Как войти в Duende IdentityServer из мобильного приложения Android
Мы разрабатываем веб-приложение ASP.NET с интерфейсом Angular.
Проект старый, он был перенесен в Дуэнде из старой версии, где аутентификация осуществлялась нами с помощью токенов. После того как в проект по умолчанию в Visual Studio была добавлена поддержка аутентификации отдельных пользователей (начиная с dotnet 6), мы начали мигрировать код в новый проект с улучшенной аутентификацией (Duende).
Мы также пытаемся создать приложение для Android, мы добавили клиент в appsettings.json:
"Clients": {
"AppName": {
"Profile": "IdentityServerSPA",
},
"AndroidID": {
"Profile": "IdentityServerSPA",
"Enabled": true,
"ClientId": "AndroidID",
"RequireClientSecret": false,
"ClientName": "AndoidApp",
"ClientSecrets": [ { "Value": "" } ],
"RequirePkce": true,
"AllowedGrantTypes": [ "code", "implicit", "client_credentials" ],
"AllowedScopes": [ "openid", "profile", "email", "phone", "api" ],
"RedirectUris": [ "https://aaa/well-known/openid-configuration" ],
"RequireConsent": false,
"AllowOfflineAccess": true
}
}
На стороне Android мы используем библиотеку: https://github.com/openid/AppAuth-Android . В наших тестах мы меняем конфигурацию примера приложения из репозитория AppAuth.
{
"client_id": "AndroidID",
"redirect_uri": "https://aaa/authentication/login-callback",
"end_session_redirect_uri": "https://aaa/connect/endsession",
"authorization_scope": "openid email profile SIGADAPI",
"authorization_endpoint_uri": "https://aaa/identity/account/login",
"token_endpoint_uri": "https://aaa/connect/token",
"registration_endpoint_uri": "",
"user_info_endpoint_uri": "https://aaa/home",
"https_required": true,
"end_session_endpoint": "https://aaa/connect/endsession",
"client_secret" : "",
"response_types": "code",
"jwks_uri": "https://aaa/.well-known/openid-configuration/jwks",
"revocation_endpoint": "https://aaa/connect/revocation",
"grant_types": [ "code", "implicit", "client_credentials"],
"scopes_supported" : [ "openid", "profile", "email", "phone", "SIGADAPI" ]
}
Проблема в том, что в Login.cshtml returnUrl имеет значение null. В C# мы получаем успешный ответ для _signInManager.PasswordSignInAsync, но у нас нет действительного returnUrl для обратного вызова, поэтому в конечном итоге в Android мы не вошли в систему.
Я знаю, что ответ действительно прост, и мы надолго застряли на этом этапе, но что мы делаем не так и как вам удается войти в систему с другого клиента.
Версия dotnet — 6, а Duende IdentityServer — 6.0.8.
Большое спасибо за Вашу помощь