문제

보지 않은 많은 제네바에 관한 질문이 아직 게재하고 있는 이 질문에서 제네바 Forum 뿐만 아니라...

난 작업 시나리오를 우리가 승리 형태의 응용 프로그램으로 다양한 installbase 는 것이 발행하는 빈번 호출하여 호스팅되는 다양한 서비스에 의해 우리가 중앙에 걸쳐 그것의 작업입니다.

이 서비스는 모두 사용하여 제네바 프레임워크와 모든 클라이언트가 예상되는 전화를 우리의 STS 최초 발행하는 토큰으로 접근을 허용하기 위한 서비스입니다.

상자를 사용하여 ws2007FederationHttpBinding,응용 프로그램 구성할 수 있는 토큰을 검색하 STS 에서 각각 전에 서비스를 호출하지만,물론 이것이 가장 효율적인 방법으로 우리는 거의 중복하의 노력을 호출하는 서비스입니다.

또한,나를 구현하는 데 필요한 코드를 검색하는 토큰"수동"으로 응용 프로그램에서,및 그 후 통과 같은 사전 검색할 때 토큰 호출하는 작업을 서비스(에 따라 WSTrustClient 및 샘플 helpon 포럼);잘 작동하는 그래서 우리가 하는 솔루션이 있지만,나는 believeit 아주 우아하지 않으로 필요한 건물 WCF 채널에서 코드를 움직이는텔에서 멋진 WCF 구성이 있습니다.

나는 훨씬 선호하 ws2007FederationHttpBinding 접근 방식으로 단순히 클라이언트를 호출 서비스는 다음과 같은 다른 어떤 WCF 서비스에 대해 아무것도 모르고 제네바와 바인딩 케어는 토큰의합니다.

그런 다음 누군가(존 Simpson)준[내가 무엇을 생각하는 것입니다]훌륭한 아이디어를 추가하는 서비스에서 호스팅,응용 프로그램 자체을 캐시 로컬로 검색습니다.로컬 캐시 서비스를 구현하는 동일한 계약으로 STS;면을 receiveing 요청을 것이 확인하십시오 cahced 토큰 존재하고,그렇다면 반환하는 것,그렇지 않으면 그것을 부를 것이'진짜'STS,가져올을 새로 토큰,캐시하고 반환합니다.클라이언트 응용할 수 있 다음 사용 ws2007FederationHttpBinding 지만,대신 STS 으로 발행 그것은 로컬 캐시;

이 방법은 내 생각에는 우리가 달성할 수 있는 두 세계의 최고를 캐싱의 토큰 없이 서비스-sepcific 사용자 지정 코드우리의 캐시 처리할 수 있어야 토큰에 대한 모든 RPs.

내가 만들어진 매우 간단한 프로토타입 작동하는지 확인하기 위해,그리고-다소 놀라운 일이 아닙 불행하게도-나는 약간씩 붙

나의 로컬 서비스(현 콘솔 응용 프로그램)요청을 가져오고,주위에 처음-전화 STS 를 검색하는 토큰,캐시하고 성공적으로 반환합 클라이언트는,그 후,그것을 사용하여 전화 RP.모두가 잘 작동합니다.

두 번째의 주위에,그러나 로컬 cahce 서비스를 사용하려고 하면 동일한 토큰을 다시지만,클라이언트 측면 실패하 MessageSecurityException-

"보안 프로세서를 찾을 수 없었 보안 헤더에서 메시지입니다.이 될 수 있기 때문에 메시지가 안전하지 않는 결함 또 있기 때문에 바인딩 불일치 사이의 통신사.이 경우에 발생할 수 있습 서비스로 구성된 보안 및 클라이언트가 사용하지 않는 보안이다."

무언가가 있을 방지하는 동일한 토큰 사용하세요.나는 그것을 의심하기 때문에 재사용되는 토큰으로 당 WSTrustClient 샘플 잘 작동한다;나는 무엇이 없는가?내 아이디어 가능한가요?좋은 하나?

여기에(아주 기본적인 이 단계에서)기본 코드 비트의 로컬 캐시

    static LocalTokenCache.STS.Trust13IssueResponse  cachedResponse = null; 
    public LocalTokenCache.STS.Trust13IssueResponse Trust13Issue(LocalTokenCache.STS.Trust13IssueRequest request) 
    { 
        if (TokenCache.cachedResponse == null) 
        { 
            Console.WriteLine("cached token not found, calling STS"); 
            //create proxy for real STS 
            STS.WSTrust13SyncClient sts = new LocalTokenCache.STS.WSTrust13SyncClient(); 
            //set credentials for sts 
            sts.ClientCredentials.UserName.UserName = "Yossi"; 
            sts.ClientCredentials.UserName.Password = "p@ssw0rd"; 
            //call issue on real sts 
            STS.RequestSecurityTokenResponseCollectionType stsResponse = sts.Trust13Issue(request.RequestSecurityToken); 
            //create result object - this is a container type for the response returned and is what we need to return; 
            TokenCache.cachedResponse = new LocalTokenCache.STS.Trust13IssueResponse(); 
            //assign sts response to return value... 
            TokenCache.cachedResponse.RequestSecurityTokenResponseCollection = stsResponse; 
        } 
        else 
        { 
        } 
        //...and reutn 
        return TokenCache.cachedResponse;
도움이 되었습니까?

해결책

이것은 거의 당황하지만,덕분에 도미닉 Baier 포럼에서 나는 더 이제 실현 나가 거대 포인트(나는 그것을 알지 않았다해!정직하게!:-))-

토큰을 얻을 검색 한 번 서비스,프록시고 가정하지 않은 만료하고,그래서 모든 나는 할 필요가 재사용하는 같은 프록시하는 계획을 어쨌든지만,오히려 바보지 않았 내 프로토 타입입니다.

또한-발견 매우 흥미로운 샘플에 MSDN WCF 샘플 튼튼한 토큰을 발급 업체, 는 경우,나는 그것을 이해 올바르게 사용하는 사용자 정의 끝점 행동은 클라이언트 측에서 구현하는 토큰 캐싱하는 매우 우아한입니다.

나는 여전히 이 방법으로 우리는 여러 가지 서비스하고 그래서 우리는 달성할 수 있는 더 효율성을 다시 사용하여 동일한 토큰 사이에 프록시입니다.

렇게 두 가지 솔루션,거보 보호 정책,사용권 협의에 동의하는 나의 눈;희망 나의 어리 석음이 누군가가 도움이 됩에서 어떤 시점!

다른 팁

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