Pergunta

Eu estou trabalhando em um protótipo de um baseado em declarações de autorização para nosso aplicativo MVC.Nós usamos Asp.Net Identidade para autenticação.

Gostaríamos de ter uma reclamação para cada ação do controlador e, em seguida, dar/tirar dos usuários reivindicações por isso, temos um controle muito fino sobre quem pode ir para onde.

Nosso aplicativo já tem 800+ ações e continua a crescer.Eu tenho feito um pouco de aplicativo de teste para ver como este número de reclamações podem ser manipulados.E executar um problema: os cookies estão limitados a 4092 bytes.

E tendo um grande número de reclamações aumenta a Identidade cookie de Autenticação.Cerca de 600 créditos com nomes curtos de valores/(5 caracteres cada) me dar cookie do tamanho de mais de 4K de usuário e com este número de créditos só não pode de início de sessão do cookie não pode ser definida em um navegador.

E 600 reclamações não é um limite para a nossa aplicação.Nós provavelmente vamos precisar de mais do que isso.

Existe uma maneira de separar o auth-cookie em algumas pequenas cookies?

p.s.Se você está curioso, aqui é o meu código para pedidos de "profiler" juntamente com o resto do projeto.

p.p.s.Eu sei sobre as implicações de desempenho de grande cookies.Não se preocupe sobre ele apenas agora.

Atualização Atualmente não existem fora da caixa, a solução para a minha resposta.Mas parece que eu não sou o único com esse problema. Microsoft.Owin está a lidar com a autenticação de cookie.E de código fonte atual para Owin.Os Cookies tem ChunkingCookieManager qual é atribuído por padrão no CookieAuthenticationMiddleware.

Má notícia que este código é muito fresco (estava marcado no dia 10 de julho de 2014, apenas 20 dias de idade).Ele está disponível através de pré-lançamento do nuget A Microsoft.Owin.Segurança.Cookies.Não, com certeza eu iria querer usar o RC2 no local de produção.

Qualquer outra forma?

Foi útil?

Solução 2

Eu não resolvi a pergunta direta. O cookie é muito grande e permanecerá grande com grande número ou reivindicações. OWIN V3.0 (atualmente no RC2, não pronto para produção) tem uma maneira de cortar os cookies em menores. Mas grandes cookies são apenas ruins. Então estou mantendo apenas o lado do servidor de sinistros.

Eu tive um discussão sobre o fórum de identidade e encontrei This Pergunta que aborda as minhas perguntas completamente. Baseando a pergunta, eu fiz minha própria solução e prototipado um pequeno aplicativo MVC: https://github.com/ Trailmax / ReexsAuthorationation .

O núcleo da solução está em Rotina de inicialização e há um Filtro de MVC Que verifica se as reivindicações necessárias estão disponíveis para o usuário.

Outras dicas

Você está usando as reivindicações incorretamente.As reivindicações representam a identidade do usuário, não as ações que podem executar.Você está correndo em problemas porque está tratando reivindicações como uma casa para permissões de usuário.Você realmente deve encontrar uma maneira de separar os dois em sua inscrição.

na moda MVC, isso seria criando um atributo autorizar personalizado, obtendo a identidade do usuário do cookie de reclamação e verificando que a identidade do usuário pode executar alguma ação.

Veja as perguntas relacionadas abaixo.

restringindo o acesso a registros.É permissões baseadas em reclamação uma boa ideia

Autorização de reivindicações para recursos específicos

Você deve usar Papel

[Authorize(Roles = "Admin, Role1")]
  public ActionResult Index(string id)
{....}
[Authorize(Roles = "Admin, Role2")]
  public ActionResult Index2(string id)
{....}
[Authorize(Roles = "Admin, Role1, Role3")]
  public ActionResult Index3(string id)
{....}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top