У меня есть клиентская интеграция, и я хотел авторизацию между компьютерами между этим сервером и нашими серверами.Я предполагал, что мог бы использовать поток authorization_code, но, похоже, ему нужен cookie-файл пользователя, иначе он всегда перенаправляет на страницу входа.
Есть ли способ с помощью IdentityServer4, что сервер может запросить меня с некоторымипользовательская информация, например, может быть, зашифрованный идентификатор пользователя, и я могу использовать его для возврата кода авторизации?Я смог достичь этого с помощью собственной реализации AuthorizeInteractionResponseGenerator
.Я переопределил метод ProcessLoginAsync()
и ввел новый тип приглашения, скажем, abc
, поэтому, когда предоставленный тип приглашения равен abc
, я беру идентификаторы пользователя из необработанного запроса и регистрирую этого пользователя при создании ClaimsPrincipal
до тех пор, покаконец Я получаю сообщение об ошибке:
InvalidOperationException: пользователь в настоящий момент не аутентифицирован
Представленная трассировка стека выглядит следующим образом:
System.InvalidOperationException: User is not currently authenticated
at IdentityServer4.Services.DefaultUserSession.<SetClientListPropertyValueAsync>d__26.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at IdentityServer4.Services.DefaultUserSession.<SetClientsAsync>d__25.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at IdentityServer4.Services.DefaultUserSession.<AddClientIdAsync>d__22.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at IdentityServer4.Endpoints.Results.AuthorizeResult.<ProcessResponseAsync>d__12.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at IdentityServer4.Endpoints.Results.AuthorizeResult.<ExecuteAsync>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at IdentityServer4.Hosting.IdentityServerMiddleware.<Invoke>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at IdentityServer4.Hosting.IdentityServerMiddleware.<Invoke>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.<Invoke>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.<Invoke>d__8.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at IdentityServer4.Hosting.BaseUrlMiddleware.<Invoke>d__3.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.<Invoke>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at Rp.Middleware.IdHashing.IdHashingMiddleware.<Invoke>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.<Invoke>d__7.MoveNext()
Это имеетэто должно быть сделано из-за требования, здесь нет споров, но я хотел бы, чтобы ваша помощь заключалась в том, как я могу устранить вышеупомянутую ошибку?Кроме того, я делаю слишком много переделок, в то время как я мог бы использовать IdentityServer4 каким-либо другим способом для достижения этой цели?
С нетерпением ждем вашего ответа.Спасибо!
Обновление:
Поэтому, чтобы дать всем немного больше контекста, я не пытаюсь сделать единый вход.Что я делаю, так это то, что я создаю приложение для клиента, который не хочет, чтобы пользователи знали, что приложение не от них.Таким образом, пользователь входит на веб-сайт клиента, но на одной из страниц загружается приложение Angular.Теперь это приложение не зависит от клиента, оно имеет все, что ему нужно в нашей БД, все, что ему нужно от клиента, - это то, что нам нужно передать, чтобы мы могли также войти в систему с клиентским пользователем в нашем приложении, но без какого-либо согласия иличто-нибудь, чтобы создать ощущение, что наше приложение на самом деле является частью клиентского приложения.И мы не можем полностью полагаться на аутентификацию клиента, потому что у меня несколько клиентов, и все делают аутентификацию по-разному.