Pergunta

Estou usando o Exchange Web Services para encontrar, criar, atualizar e excluir compromissos dos calendários para uma ou mais pessoas. O pedido seria usado por um gerente para visualizar o tempo de férias dos funcionários, além de atribuir compromissos com base na disponibilidade.

Para que isso funcione, as credenciais de um usuário autenticado devem ser enviadas para o serviço da Web. Até o momento, os dois métodos que eu descobri que permitiriam isso são 1) passando no nome de usuário e na senha de cada usuário e 2) personificando um usuário para usar o DefaultCredentials. A opção DefaultCredentials não funciona para nós porque não permitimos a se passar de usuários.

Alguém sabe outra maneira?

Foi útil?

Solução

Existem restrições de políticas da empresa que impedem você de usar a representação? Você está se referindo à representação ou representação do Windows?

Dependendo de qual representação que você não pode usar, uma alternativa pode ser delegada.

Se o objetivo é deixar um gerente visualizar várias caixas de correio, aqui estão algumas opções:

(1) Conceda o acesso delegado às caixas de correio dos funcionários ao gerente. Dependendo do nível de acesso delegado, isso permitiria ao gerente visualizar as caixas de correio dos funcionários e editar conforme necessário. Há uma ressalva sobre essa abordagem, dependendo do que/como o acesso é concedido, o delegado (funcionário) pode remover o acesso e impedir o gerente de visualizar seus calendários.

Para autenticação usando o Acesso Delegado, assumindo que o aplicativo usando serviços da Web estivesse em execução no contexto do gerente, você pode usar o DefaultCredentials.

(2) Crie uma conta de serviço que tenha direitos de representação ou delegue acesso às caixas de correio dos funcionários. Em seguida, efetue login como conta de serviço.

Além disso, aqui estão alguns links que você pode achar útil ...

Outras dicas

Se eu te entendesse direito, o gerente usaria o aplicativo e autenticaria o EWS como ele mesmo. O EWS não poderá atualizar a caixa de correio de outro usuário devido a permissões insuficientes.

Que tal dar ao gerente acesso à caixa de correio de cada usuário?

(Ou estou perdendo uma parte substancial da pergunta?)

Se o usuário for conectado à sua própria máquina, e é provável que essas credenciais estejam disponíveis no cache de credenciais, você poderá construir um objeto WebCredential a partir do objeto icredencials obtido a partir daí:

public static ExchangeService GetService()
{
    var webCredentials = new WebCredentials(CredentialCache.DefaultNetworkCredentials);

    var service = new ExchangeService(ExchangeVersion);
    service.AutodiscoverUrl(Properties.Settings.Default.SmptAccountName);
    service.Credentials = credentials;

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