Fornecedor de credenciais do Windows com c #

Alguém criou com sucesso um Provedor de Credenciais do Windows personalizado em C #? Os exemplos que estão no Windows SDK estão todos em C ++. Algumas pesquisas iniciais que fiz indicam que isso pode ser possível, mas não consigo encontrar alguém que tenha confirmado.

+1 para pgina . Como diz Cody, não há API gerenciada que você possa usar para criar um Provedor de Credenciais e, se quiser ir para a rota pInvoke, provavelmente levará mais tempo resolvendo problemas de pInvoke do que descobrir o Provedor de Credenciais.

Onde pGina pode ajudá-lo é que ele tem uma boa arquitetura Plugin e os Plugins são escritos em código gerenciado. Veja o gráfico aqui . A pGina gerencia a comunicação com LogonUI (código nativo), mas depende dos plugins (gerenciados) para fazer a autenticação real, que é provavelmente o que você deseja controlar (caso contrário, você provavelmente não precisaria de seu próprio provedor de credenciais).

O novo modelo CredentialProvider no Windows Vista e superior é baseado em COM. Isso significa que deve ser possível contanto que você implemente as interfaces COM corretas.

Com base nisso, deve ser mais fácil construir do que o modelo GINA mais antigo, já que o módulo GINA mais antigo usava pontos de input DLL e pointers de function em vez de interfaces COM.

Dada a capacidade de .net para interoperar com COM, deve ser tão fácil como:

  1. Criando uma definição C # da interface ICredentialProvider e adicionando os atributos COM corretos com as GUID corretas
  2. Construindo uma class de provedor de credenciais que implementa o ICredenitalProvider e está marcada como COMVisible (True)
  3. Registrando o novo assembly com o Regasm
  4. Adicionando as chaves de registro corretas para registrar seu novo CredentialProvider com o Windows (Provedores Software \ Microsoft \ Windows \ CurrentVersion \ Authentication \ Credential)

Se você fizer tudo isso, você terá um provedor de credenciais de trabalho, escrito em c #

Confira pGina. Eu estava brincando com isso e parece funcionar bem na minha instalação do Windows 8, por isso deve funcionar bem com todas as versões do Windows antes disso também. Ainda está em estágios bem iniciais e eu não consigo ver nenhuma maneira de criar uma interface personalizada sem ter que me aprofundar na metade nativa do projeto. Espero que isto ajude!

[EDIT] Apenas leia o comentário de Cody Gray novamente. Para ser claro, pGina é realmente apenas o código nativo escrito para você. Mas sim, você provavelmente teria mais controle escrevendo em C ++ para começar, mas se você não precisa de muito controle sobre como é apresentado, então pGina é o caminho a percorrer.