문제

나는 이것에 대한 답변을 검색했지만 지금까지 유용한 것으로 나타나지 않았습니다. 나는 ADFS, STS의 일반 및 WIF에 꽤 새로운 것이므로 명백한 무지 또는 용어의 부적절한 사용을 실례합니다. ;)

현재 ADFS를 통해 외부 IDP와 사용자 정의 MVC3 앱을 통합하고 있습니다. IDP 설정에 대한 ADFS가 모두 수행되고 작동합니다.

사이트의 일부 부분은 Web.config 인증 모드에서 ANON 사용자가 NONE으로 설정된 ANON 사용자가 액세스 할 수 있습니다. 다른 부분은 사용자 정의 System.Web.mvc.AuthorizeAttribute로 컨트롤러 / 조치 메소드를 사용하여 보호됩니다.

WSFEDerationAuthenticationModule을 사용하기위한 Web.config의 모든 일반적인 수정이 이루어졌으며 95 %가 작동합니다. 사용자는 사이트의 Anon 접근 가능한 부분을 탐색 할 수 있습니다. 보호 된 부분을 시도하고 히트 할 때 권한 부여 속성은 httpcontext.current.user와 관련된 iClaimsPrincip의 IDP에서 사용자 정의 정보가 있는지 확인한 다음 그렇지 않은 경우 actionResult를 401로 설정합니다. WSFEDerationAuthenticationModule은 IDP의 로그인 페이지로 옮기고 리디렉션합니다. 그들이 세부 정보를 입력하면 일부 Fedauth 쿠키와 승인으로 성공적으로 리디렉션됩니다.

IDP의 로그인 페이지로 이동하면 문제가 발생합니다. 이 특정 IDP는이 SAML 응답이 어딘가에 포함 된이 SAML 응답을 사용하여 사이트에 직접 반품 할 링크가 있습니다 (이것은 문서에 따라 문서에 따라)

urn : OASIS : 이름 : TC : SAML : 2.0 : 상태 : authnfailed

이 시점에서 "무단"이고 모든 사용자가 볼 수 있습니다 (적어도 dev)은 401 페이지입니다. 세션을 죽이거나 그렇지 않으면 해당 쿠키를 다시 시작하여 다시 시작해야합니다.

무엇을해야 할 일은 IDP의 리디렉션 요청을 가로 챌 수 있으며, 사용자가 무단 영역 중 하나로 어떻게 무단 영역 중 하나로 리디렉션되어야하기 때문에 특정 SAML 상태를 확인하는 것입니다. 나는 글로벌 에서이 같은 것을 시도했습니다 .asax :

 protected void Application_Start()
    {
        // mvc stuff here....

        // add handler to intercept handling creation of security tokens by WsFederationAuthnticationModule
        FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;
    }

    void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
    {
        FederatedAuthentication
            .WSFederationAuthenticationModule
            .SessionSecurityTokenCreated += WSFederationAuthenticationModule_SecuityTokenCreated;
    }

    public void WSFederationAuthenticationModule_SecuityTokenCreated (Object sender, SessionSecurityTokenCreatedEventArgs args) 
    {          
        var token = args.SessionToken;
        // do something with the session token here e.g. check for SAML status
    }
.

.. 그러나 나는 그 토큰에 유용한 것을 볼 수 없다. 특정 응답 상태를 나타내는 것은 없습니다. Fedauth Cookie 모두 에 있지만 IDP의 사용자 정의 정보가 없지만 사용자가 거기에 있지만 어떻게 든 인증하지 못했지만 원칙적으로 나는 할 수 있기를 원한다. 해당 상태를 참조하십시오. IDP에서 시간 초과를 처리해야 할 수도 있습니다 ....

어쩌면이 모든 것을 잘못하고 있습니다. 그러나 단지 일반 오래된 것은 이해하지 못하지만 어떻게 든 그 응답 상태를 결정하는 방법에 대해 나를 채울 수 있습니까?

Phew. 감사합니다! : D

도움이 되었습니까?

해결책

OK, 그래서 나는 내 자신의 질문에 대답 할 것입니다.

IDP에서 사용자 정의 상태를 얻을 수 있는지 여부에 대한 답변은 현재입니다. : ()

그러나 이것은 ADFS가 캡처하고 전달하기 위해 설정하지 않기 때문입니다. 분명히 ADFS와 IDP 사이에 열린 백 채널에서 정보를 캡처하기위한 사용자 정의 코딩을 수행해야합니다. 현재 작업 범위를 벗어납니다.

순간의 작업으로 :

  • 사이트에 요청이 있고 SAML 토큰이 없으면 IDP 에서 인증 시도를하지 않은 사용자가 새로운 요청이 없습니다.
  • SAML 토큰이 있지만 토큰의 IDP에서 ID가없는 경우 (제대로 인증 할 때만 발생 함) 사용자가 실패한 이유로 사용자가 실패했습니다.
    • ID가있는 SAML 토큰이있는 경우 사용자는 적절하게 사용자가 올바르게 올바르게 '

      훌륭하지는 않지만 수용 할 수 없습니다. BTW, 모든 신용은 YMC SO POST :

      void WSFederationAuthenticationModule_SecurityTokenReceived(object sender, SecurityTokenReceivedEventArgs e)
          {
              var message = SignInResponseMessage.CreateFromFormPost(Request) as SignInResponseMessage;
              var rstr = new WSFederationSerializer()
                  .CreateResponse(message,
                  new WSTrustSerializationContext(
                      SecurityTokenHandlerCollectionManager.CreateDefaultSecurityTokenHandlerCollectionManager()));
          } 
      
      .

      PCE!

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