Pergunta

Tenho uma aplicação ASP.NET que é executado em nossa intranet. Na produção posso obter o usuário do contexto de domínio e ter acesso a muita informação, incluindo o seu primeiro e último nome (UserPrincipal.GivenName e UserPrincipal.Surname).

O nosso ambiente de teste não faz parte do domínio de produção e usuários de teste não têm contas de domínio no ambiente de teste. Então, nós adicioná-los como usuários da máquina local. Eles são solicitadas as credenciais quando eles navegar para a página inicial. Eu uso o seguinte método para obter o UserPrincipal

public static UserPrincipal GetCurrentUser()
        {
            UserPrincipal up = null;

            using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
            {
                up = UserPrincipal.FindByIdentity(context, User.Identity.Name);
            }

            if (up == null)
            {
                using (PrincipalContext context = new PrincipalContext(ContextType.Machine))
                {
                    up = UserPrincipal.FindByIdentity(context, User.Identity.Name);
                }
            }

            return up;
        }

O problema que tenho aqui é que quando o UserPrinicipal é retrived quando ContextType == Máquina de eu não conseguir imóveis como GivenName ou Sobrenome. Existe uma maneira de definir esses valores ao criar o usuário (Windows Server 2008) ou que eu preciso de fazer isto de uma maneira diferente?

Foi útil?

Solução

A função das necessidades pergunta original a ser modificada. Se você tentar acessar o objeto UserPrincipal que é retornado, você receberá um ObjectDisposedException

Além disso, o User.Identity.Name não está disponível e precisa ser passado.

Eu fiz as seguintes alterações para a função acima.

public static UserPrincipal GetUserPrincipal(String userName)
        {
            UserPrincipal up = null;

            PrincipalContext context = new PrincipalContext(ContextType.Domain);
            up = UserPrincipal.FindByIdentity(context, userName);

            if (up == null)
            {
                context = new PrincipalContext(ContextType.Machine);
                up = UserPrincipal.FindByIdentity(context, userName);
            }

            if(up == null)
                throw new Exception("Unable to get user from Domain or Machine context.");

            return up;
        }

Além disso, a propriedade de UserPrincipal I necessidade de uso é DisplayName (em vez de GivenName e sobrenome);

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top