maneira segura de autenticar administrador no site ASP.NET usando OpenID com DotNetOpenID
-
09-06-2019 - |
Pergunta
Incentivado pelo SO, estou tentando escrever um site ASP.NET que use OpenID para autenticação de usuário.É um site WinForms normal (não MVC.NET), usando o DotNetOpenID biblioteca para autenticação.
É seguro permitir/negar funções administrativas no site simplesmente comparando o "ClaimedID" da sessão atual (conforme retornado no evento OpenIdLogin_LoggedIn, como membro DotNetOpenId.RelyingParty,OpenIdEventArgs.Response.ClaimedIdentifier) com o OpenID de um administrador conhecido (ou seja,meu)?
Em caso afirmativo, é seguro que este ID fique visível (por exemploem código-fonte aberto) ou deveria estar "oculto" em um arquivo de configuração ou em uma linha do banco de dados?(Eu sei que é melhor projetar para torná-lo configurável, minha pergunta é apenas sobre segurança.)
Solução
Jarrett faz alguns bons comentários sobre o uso de tabelas de banco de dados.
Só para responder a outra de suas perguntas, não, geralmente não é uma questão de confidencialidade colocar seu OpenID em seu código.Se a configuração de funções parece um exagero para o seu site, uma simples verificação de igualdade em relação ao seu ClaimedIdentifier é simplesmente perfeita.
Outras dicas
Minha solução é seguir a mesma ideia da tabela Roles.Depois de autenticar o usuário, procure as funções dele.Se o usuário tiver a função "Administrador" na tabela UserRoles, ele poderá fazer tudo o que o Administrador puder fazer.
Não transmito IDs abertos em meu aplicativo.Eles estão armazenados na tabela.Em cada resultado de ação, estou acessando a tabela Usuários, pois também modifiquei a minha para armazenar diversas informações de estado do usuário.Com exceção da página inicial, precisarei de algumas informações do usuário nessa tabela.Estou usando LINQ, então incluo .LoadWith() para carregar o usuário com sua lista de funções quando ele serializa.