IdentityServer4 с аутентификацией Windows и пользовательскими утверждениями - PullRequest
0 голосов
/ 28 мая 2018

У меня проблема с аутентификацией Windows и пользовательскими утверждениями.
У меня есть identityServer с аутентификацией Windows и User.Identity.Name, показывающее мое имя AD.Но я не могу понять, как я должен добавить некоторые свойства из моего хранилища для этого пользователя.У меня сейчас что-то вроде этого:

var claims = new List<Claim> {
      new Claim("devhomepage", "www.devsite.com", ClaimValueTypes.String)};
var userIdentity = new ClaimsIdentity(claims, "siteinfo");
User.AddIdentity(userIdentity);
await HttpContext.SignInAsync(User);
return RedirectToLocal(returnUrl);

, и оно не работает :-) мой клиент не будет авторизован.

вот конфиг для сервера

new Client
                {
                    ClientId = "mvc",
                    ClientName = "MVC Client",
                    AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
                    ClientSecrets =
                    {
                        new Secret("secret".Sha256())
                    },
                    RedirectUris = {"http://localhost:60640/signin-oidc"},// where to redirect to after login
                    PostLogoutRedirectUris = {"http://localhost:60640/signout-callback-oidc"},// where to redirect to after logout
                    AllowedScopes = new List<string>
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile,
                    },
                    AllowOfflineAccess = true,
                    RequireConsent = false

и не является клиентом

services.AddAuthentication(options =>
                {
                    options.DefaultScheme = "Cookies";
                    options.DefaultChallengeScheme = "oidc";
                })
                .AddCookie("Cookies")
                .AddOpenIdConnect("oidc", options =>
                {
                    options.SignInScheme = "Cookies";
                    options.Authority = "http://localhost:49245/";
                    options.RequireHttpsMetadata = false;
                    options.ClientId = "mvc";
                    options.ClientSecret = "secret";
                    options.ResponseType = "code id_token";
                    options.GetClaimsFromUserInfoEndpoint = true;
                    options.SaveTokens = true;
                });

1 Ответ

0 голосов
/ 04 июня 2018

Для входа в систему я должен использовать класс Microsoft.AspNetCore.Identity.SignInManager с методом SignInAsync (/ * Я должен нанять объект TUser, который я сохранил в своей базе данных, и выполнить сопоставление с моей учетной записью AD * /)

Чтобы использовать настраиваемые утверждения (будет использоваться для всех образцов с настраиваемыми утверждениями в IS4):

public class ProfileService : IProfileService
    {
        protected UserManager<IdentityUser> _userManager;

        public ProfileService(UserManager<IdentityUser> userManager)
        {
            _userManager = userManager;
        }

        public async Task GetProfileDataAsync(ProfileDataRequestContext context)
        {
            //>Processing
            var user = await _userManager.GetUserAsync(context.Subject);
            //my custom claims
            var claims = new List<Claim>
                {
                    new Claim("devhomepage", "www"),
                    new Claim("reporting","reps")
                };

            context.IssuedClaims.AddRange(claims);
        }

        public async Task IsActiveAsync(IsActiveContext context)
        {
            //>Processing
            var user = await _userManager.GetUserAsync(context.Subject);

            context.IsActive = (user != null);
        }
    }

Но этот сервис я должен зарегистрировать только после того, как мой IdentityService

services.AddIdentityServer()
...
services.AddTransient<IProfileService, ProfileService>();
}

изConfigureServices

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