Как подключить пользователя Asp. net core Identity к пользователю IdentityServer4 - PullRequest
0 голосов
/ 25 марта 2020

У меня развернут IdentityServer4 с базой данных резервного сервера SQL. У меня также есть развернутые службы Asp. NET Core WebAppi, которые используют IdentityServer4 в качестве органа. Затем у меня есть клиент Typescrip SPA, который использует (на данный момент) IdenityServer4 для входа в систему и получения JWTToken для подключения к WebAPI.

Как использовать Microsoft Indentity в WebApi для управления авторизациями. Я имею в виду, что теперь, когда я аутентифицируюсь в IdentityServer, я получаю объект User в моих контроллерах WebApi. Этот пользователь привязан к IdentityServer4 и имеет свои претензии. Я хотел бы подключить этого пользователя к локальному Asp. NEt идентификационному пользователю из моего WebApi, чтобы я мог управлять его ролями и запрашивать права специально для этого WebApi.

В WebApi мне бы хотелось используйте идентификатор Microsoft asp. net для локального хранения пользовательских, пользовательских ролей, спецификаций заявок пользователей c для этого webApi и используйте только IdentityServer4 для аутентификации. Как привязать пользователя IS4 к моему Asp. NEt Core Identity User?

1 Ответ

1 голос
/ 26 марта 2020

Хотя вы можете получать роли пользователя из конечной точки UserInfo IdentityServer и делать то же самое, что вы собираетесь делать с Asp. Net Идентичность.

Итак, после всей операции проверки токена вы должны проверьте, существует ли пользователь в вашей базе данных или нет. Если не было, добавьте пользователя в свою базу данных.

        services.AddAuthentication(options =>
        {
            options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

        }).AddJwtBearer(options =>
        {
            options.Authority = "";
            options.RequireHttpsMetadata = false;
            options.Audience = "";
            options.Events.OnTokenValidated = async (context) =>
            {
                var usermanager = services.BuildServiceProvider().GetService<UserManager<ApplicationUser>>();
                var user = await usermanager.FindByNameAsync(context.HttpContext.User.Identity.Name);

                if (user == null)
                {
                    user = new ApplicationUser();
                    user.UserName = context.HttpContext.User.Identity.Name;
                    //...

                    await usermanager.CreateAsync(user);
                }
            };
        });
...