Como implemento o Principal e a identidade personalizados no ASP.NET MVC?

Desejo armazenar informações extras no usuário autenticado para que eu possa acessá-las facilmente (como User.Identity.Id, por exemplo), em vez de apenas o nome, pois estou pensando em torná-lo não exclusivo.

Até agora, deduzi que deveria implementar o Principal e / ou Identidade personalizados, mas não sei ao certo como fazê-lo. Estive procurando documentação e tutoriais sobre o assunto, mas encontrei coisas relacionadas em lugares diferentes e achei um pouco confuso.

Eu vi como adicionar informações personalizadas ao cookie de autenticação na propriedade de dados do usuário, mas gostaria de ter o benefício da injeção de dependência para testes de unidade, que posso ter com o principal e a identidade.

O que são asexato etapas que preciso considerar se eu quiser implementar meu próprio Principal ou Identidade?

Qual seria o mais simples que eu poderia fazer nesse cenário (basta adicionar o ID e manter todos os padrões no lugar)? "Padrões" incluiriam os provedores padrão (associação, funções etc.).

Eu vi ooutra questão, mas eu apreciaria respostas que não deixem nenhum buraco no meio, como as seqüências mágicas de papéis no evento AuthenticateRequest nos exemplos. Em vez disso, preciso saber como adicionar as funções do SqlRoleProvider padrão ao usuário atual: quando e onde fazê-lo, e se precisar fazer mais alguma coisa para conectar minhas novas classes aos outros provedores padrão.

Seria incrível poder acessar um exemplo de aplicativo ASP.NET MVC 2 (do modelo do visual studio 2010, por exemplo), fazer as edições e fazer com que funcionasse.

EDITAR: Eu editei a pergunta para mostrar melhor que eu sou praticamenteperdido aqui, então não posso me contentar com respostas de nível muito alto.

P.S .: Parece-me que faz mais sentido ter o ID na Identidade do que o principal, embora, de certa forma, já tenha afirmado isso antes.

questionAnswers(2)

yourAnswerToTheQuestion