WCF에서 클라이언트 자격 증명을 사용하여 한 번만 인증하려면 어떻게 해야 합니까?

StackOverflow https://stackoverflow.com/questions/30800

문제

WCF에 구축된 API를 사용할 때 한 번만 인증하면 되도록 하는 가장 좋은 방법은 무엇입니까?

내 현재 바인딩 및 동작은 다음과 같습니다.

    <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>

다음은 인증을 위해 클라이언트 앱에서 사용하는 것입니다(현재는 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()

제가 하고 싶은 일은 이러한 자격 증명을 사용하여 API를 통해 인증한 다음 클라이언트 애플리케이션이 웹 서비스 프로젝트를 사용하는 기간 동안 일부 유형의 토큰을 얻는 것입니다.나는 확립보안컨텍스트=true가 나를 위해 이 일을 했다고 생각했는가?

도움이 되었습니까?

해결책

인트라넷을 사용하는 경우 구성만으로 Windows 인증을 "무료"로 처리할 수 있습니다.

이것이 적절하지 않은 경우 토큰 서비스는 잘 작동하지만 일부 상황에서는 너무 과할 수 있습니다.

제가 작업 중인 애플리케이션에는 기본 인증이 필요했습니다.우리의 서버와 클라이언트는 (매우 안전한) 인트라넷 내에서 실행되므로 사용자 이름 인증을 사용하는 경우 필요한 X.509 인증서를 사용하여 통신을 암호화해야 한다는 요구 사항에 크게 신경 쓰지 않았습니다.

그래서 우리는 맞춤 동작 사용자 이름과 (암호화된) 비밀번호를 메시지 헤더에 추가하는 클라이언트와 이를 확인하는 서버의 또 다른 사용자 정의 동작.

모두 매우 간단하며 클라이언트 측 서비스 액세스 계층이나 서비스 계약 구현을 변경할 필요가 없습니다.그리고 구성을 통해 모두 완료되므로 좀 더 강력한 것으로 이동해야 하는 경우 쉽게 마이그레이션할 수 있습니다.

다른 팁

100 % 확신 할 수는 없지만 지금까지 답변이 부족하기 때문에이 경우에는 정답이 될 수도 있다고 생각합니다.

내가 아는 한 WCF를 사용하여 바로 사용할 수있는 세션 토큰 메커니즘이 없습니다. 즉, 작업을 수행하려면 무거운 작업을 수행해야합니다. 원하는 방식으로 작동합니다. WCF에는 세션 메커니즘이 있지만 메시지 순서를 보장하는 데 중점을두고 있으며 인증 세션을 만드는 데 이상적인 도구가 아니라는 점을 분명히해야합니다.

저는 모든 방식의 레거시 SOAP 스택을 처리하기 위해 자체 세션 메커니즘을 구현 한 프로젝트 작업을 마쳤지만 인증 된 세션을 구현하는 권장 방법은 파블로 시브 라로 .

자세한 내용을 알고 싶으시면 외쳐주세요.하지만 Pablo의 블로그에는 앞으로 나아갈 수있는 충분한 정보가있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top