Um login entre vários aplicativos ASP.NET MVC


8

Eu tenho trabalhado em um aplicativo ASP.NET MVC 4 que usa autenticação baseada em formulários. Os usuários são validados com relação a um provedor de associação com base em uma seleção de provedor no formulário de login. Por exemplo, neste momento, existem dois provedores: diretório ativo e um provedor personalizado que chama um serviço da Web externo. Se o usuário é válido, atualizamos as informações em nossa tabela de usuários locais, como a data do último logon, etc. Se o usuário é válido e não existe na tabela de usuários locais, adicionamos-os. Feito tudo isso, configuramos um cookie e passamos para o conteúdo principal. Todos os controladores verificam User.Identity.IsAuthenticated e retornam à página de logon se o teste falhar.

Agora me disseram que esse aplicativo está indo de um único aplicativo da Web para uma solução de vários aplicativos. Cada aplicativo deve existir independentemente dos outros, compartilhar a mesma aparência e usar a mesma funcionalidade de login. Cada aplicativo pode exigir que um novo provedor de associação seja adicionado. Também adicionaremos dados para limitar o acesso aos aplicativos. Um usuário pode ter acesso apenas a um dos aplicativos enquanto outro usuário tem acesso a todos eles.

Configurar o armazenamento de dados não é um problema. Compartilhar o layout de um aplicativo para ser usado nos outros também não é um problema. Estou com problemas para decidir como "refatorar" a funcionalidade de login, de forma que adicionar um novo provedor de associação e aplicativo "no caminho" não exija a republicação de aplicativos existentes. No momento, eles também não desejam uma página de ativação de logon único para os aplicativos. Eles gostariam que os usuários fossem diretamente a um aplicativo, logassem e fizessem o que vieram fazer. Assim, eu posso ir para http://site1.mysites.com , fazer login e fazer o meu trabalho enquanto o cara ao meu lado vai para http://site2.mysites.com , faz login e faz seu trabalho.

Estou tendo problemas para entender a melhor maneira de fazer isso. Meu primeiro pensamento foi um serviço da web WCF para o login. Eu gostaria que uma ação do controlador chamasse o webservice passando as credenciais de login. Se o login foi bem-sucedido, eu poderia obter uma lista de aplicativos para o usuário no armazenamento local. A adição de mais aplicativos não exigiria a republicação de aplicativos existentes devido a nenhuma alteração no serviço da Web para esses aplicativos.

Eu também continuo ouvindo sobre esse material da API da Web do ASP.NET. Devo seguir esse caminho? Talvez eu queira criar um site para administrar o banco de dados do usuário local, portanto, ter um site que hospede a API da Web pode ser uma opção.

O material da API da Web está errado para esta situação? Caso contrário, ele possui vantagens sobre o serviço da web WCF? Existem métodos alternativos para alcançar meu resultado final?

Respostas:


1

Parece que seus requisitos exclusivos determinam que você realmente está no caminho certo de que precisará de um provedor de autenticação universal externa para todos os seus aplicativos, especialmente o requisito de que uma alteração no provedor de associação, como você coloca, não pode e não deve resultar em uma alteração. nova versão para o seu aplicativo.

Em um provedor de autenticação universal, você pode controlar quais sites usam quais provedores de associação e pode até subjugar responsabilidades, como delegar Funções e Privilégios a vários usuários após a autenticação.

No entanto, aconselho cautela na abordagem do WCF, pois parece que os serviços Web baseados em SOAP estão lentamente sendo substituídos em importância por serviços Web baseados em REST, como o que é oferecido na API da Web do ASP.NET. O futuro dos aplicativos é móvel, e todas as principais plataformas de desenvolvimento móvel têm forte suporte para serviços Web baseados em REST.

Se você tiver a menor dúvida de que talvez precise estender o suporte do provedor de associação a aplicativos móveis, é uma boa idéia renunciar ao WCF. Além disso, os serviços web baseados em REST permitem uma melhor integração de terceiros (talvez clientes que desejam se integrar ao seu pacote de software?) Para se comunicar com seu aplicativo e recuperar informações dele.

No que diz respeito aos protocolos de autenticação para serviços Web baseados em REST, não parece haver uma boa maneira de fazer isso, mas a segurança é essencial. Há um bom artigo sobre como proteger suas solicitações de autenticação no aplicativo provedor de autenticação. http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/


Obrigado pela contribuição. Eu tinha pensado o mesmo sobre o WCF. Acredito que vou trabalhar na criação de uma solução baseada em REST e protegê-la com base nesse link.
precisa saber é
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.