IdentityServer 4 с клиентом MVC 5 .Net Framework, который уже использует ASP.Net Identity Framework - PullRequest
0 голосов
/ 20 января 2019

У меня есть старое приложение ASP.Net MVC 5, в котором уже реализована платформа Identity для входа пользователей на веб-сайт. Мы начали переходить на архитектуру микро-сервисов и теперь нуждаемся в аутентификации запросов к API (API находятся в ядре .net).

Мне удалось создать сервер идентификации и использовать почтальон с потоком ResourceOwnerPasswordAndClientCredentials , который может создавать токен jwt и аутентифицировать пользователя в API, а также выписывать заявки.

Приложение mvc имеет страницу входа, похожую на airbnb (форма входа всплывающая на главной странице), поэтому перенаправление с веб-сайта на сервер идентификации на самом деле не вариант.

Вопрос: какой поток я предполагаю использовать?

Мой клиент на сервере идентификации в настоящее время выглядит так:

new Client
{
    ClientId = "ClientWebsite",
    ClientSecrets = new[] { new Secret("secret".Sha256()) },
    AllowedGrantTypes = GrantTypes.ResourceOwnerPasswordAndClientCredentials,
    AllowedScopes = new[] {
        "WebsiteAPI",
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        IdentityServerConstants.StandardScopes.Email
    }
},

Как уже упоминалось на веб-сайте клиента уже настроен для аутентификации с использованием Cookie Authentication, запуск выглядит следующим образом:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath = new PathString(Settings.FormsAuthPath),
    Provider = new CookieAuthenticationProvider
    {
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
            validateInterval: TimeSpan.FromMinutes(30),
            regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
    }
});

Я знаю, что мне нужно что-то добавить после этого. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 20 января 2019

Поскольку вы стремитесь получить полный контроль над страницей входа, я бы определенно сказал, что вы на правильном пути с потоком ResourceOwnerPassword. Я не уверен, почему вы хотите включить тип предоставления учетных данных клиента, но он не нужен для аутентификации пользователя, как вы указали.

Исходя из того, что вы уже создали, я рекомендую убедиться, что все необходимое для потока паролей владельца ресурса реализовано. главное, что нужно сделать для этого потока, - это реализация интерфейса IResourceOwnerPasswordValidator, указанного здесь . После этого вы сможете отправлять прямые запросы к конечной точке токена 'connect / token'. Если у вас есть все надлежащие поля, указанные в публикации формы (grant_type, username, password и scopes, как описано в spec ), вы должны без проблем получить свой токен доступа и идентификатор!

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