Pergunta

Qual é a melhor abordagem para se certificar de que você só precisa autenticar uma única vez quando usando uma API construídos em WCF?

Minha corrente de ligações e comportamentos estão listados abaixo

    <bindings>
        <wsHttpBinding>
            <binding name="wsHttp">
                <security mode="TransportWithMessageCredential">
                    <transport/>
                    <message clientCredentialType="UserName" negotiateServiceCredential="false" establishSecurityContext="true"/>
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>
    <behaviors>
        <serviceBehaviors>
            <behavior name="NorthwindBehavior">
                <serviceMetadata httpGetEnabled="true"/>
                <serviceAuthorization principalPermissionMode="UseAspNetRoles"/>
                <serviceCredentials>
                    <userNameAuthentication userNamePasswordValidationMode="MembershipProvider"/>
                </serviceCredentials>
            </behavior>
        </serviceBehaviors>
    </behaviors>

Próximo é o que eu estou usando no meu aplicativo cliente para autenticar (atualmente, eu tenho que fazer isso toda vez que eu precisava para fazer uma chamada em WCF)

Dim client As ProductServiceClient = New ProductServiceClient("wsHttpProductService")
client.ClientCredentials.UserName.UserName = "foo"
client.ClientCredentials.UserName.Password = "bar"
Dim ProductList As List(Of Product) = client.GetProducts()

O que eu gostaria de fazer é auth w/ a API de uma vez usando essas credenciais, em seguida, obter algum tipo de token para o período de tempo que o meu aplicativo cliente está usando o serviço da web do projeto.Eu pensei establishsecuritycontext=true fez isso por mim?

Foi útil?

Solução

Se você está em uma intranet, a autenticação do Windows, podem ser tratadas por "livre" por configuração.

Se isso não for apropriado, os serviços de token de funcionar muito bem, mas para algumas situações, eles podem ser muito pouco.

O aplicativo que estou a trabalhar, precisava de nu-ossos de autenticação.O nosso servidor e cliente são executados dentro de um (muito seguro) intranet, de modo que não importam muito para a exigência de utilização de um X. 509 certificado para criptografar a comunicação, de que é necessárias se você estiver usando o nome de usuário de autenticação.

Então nós adicionamos uma o comportamento personalizado para o cliente que adiciona o nome de usuário e (encriptado) senha para os cabeçalhos de mensagem, e outro comportamento personalizado no servidor que verifica.

Tudo muito simples, necessária nenhuma mudança de lado do cliente de serviço da camada de acesso ou o serviço de implementação do contrato.E como tudo é feito por configuração, se e quando precisamos mover para algo um pouco mais forte do que vai ser fácil de migrar.

Outras dicas

Enquanto eu odeio dar uma resposta que eu não estou 100% certo de, a falta de respostas até agora me faz pensar potencialmente resposta correta pode estar bem neste caso.

Até onde eu sei, não existe o tipo de token de sessão mecanismo que você está procurando out-of-the-box com o WCF o que significa que você vai ter que fazer algum trabalho pesado para ter as coisas funcionando do jeito que você quer.Devo deixar claro que não é uma sessão de mecanismo no WCF, mas ele é focado em garantir mensagem de encomendas e não é a ferramenta ideal para a criação de uma sessão de autenticação.

Eu acabei de terminar de trabalhar em um projeto onde desenvolvemos a nossa própria sessão mecanismo para lidar com todos os tipos de legado SABÃO pilhas, mas eu acredito que a forma recomendada para implementar sessões autenticadas, é utilizar um Serviço de Token de segurança (STS) como Pablo Cibraro do.

Se você quiser mais detalhes entre em gritar, mas eu suspeito de Pablo blog vai ter mais de informação suficiente para lhe vapor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top