2015-01-13 18 views
9

Tôi cần viết ứng dụng khách dựa trên máy tính để bàn, một số phương thức dịch vụ web gọi tới máy chủ SharePoint sau khi thực hiện xác thực SSO dựa trên SAML.ứng dụng khách trên máy tính để bàn cho SSO bằng SAML

Tôi thấy rằng SAML SSO chủ yếu được sử dụng từ trình duyệt sẽ xử lý tất cả các chi tiết. Theo this question, có vẻ như có một công nghệ trong SAML 2.0 được gọi là ECP chỉ để kích hoạt các trình duyệt không dựa trên trình duyệt.

Tuy nhiên, một số ứng dụng như SharePoint 2010/2013 chỉ hỗ trợ SAML 1.1; những gì có thể được sử dụng trong trường hợp này?

+1

Về cơ bản SAML không yêu cầu khách hàng làm trình duyệt. Về cơ bản "trình duyệt" ở đây chỉ là một khách hàng biết làm thế nào để làm theo chuyển hướng để nó có thể được thực hiện bởi bất kỳ khách hàng đủ công phu. Tuy nhiên, ma quỷ là trong các chi tiết, đặc biệt là nếu chuyển hướng HTTP POST được tham gia vào xác thực SAML (mà chắc chắn nhất sẽ là trường hợp). Các chi tiết khác có thể phụ thuộc vào công nghệ cụ thể mà bạn sử dụng. – SergGr

+0

Bạn chưa đề cập đến bất kỳ hạn chế nào về công nghệ. Có lẽ [Electron] (https://electron.atom.io/) có thể giúp: đó là khung công tác _non-non-browser_ (☺) để tạo các ứng dụng dành cho máy tính để bàn ... nó sẽ xử lý cookie và thực hiện theo các chuyển hướng rất tốt. –

Trả lời

1

Bạn chưa đề cập đến công nghệ - tôi có thể chia sẻ kinh nghiệm của mình. Chúng tôi bắt buộc phải có SSO trong ứng dụng dành cho máy tính để bàn (WPF) đang sử dụng các dịch vụ WCF. Tôi đã bắt đầu với thông tin từ số link này. Giải pháp là sử dụng WIF để truy xuất mã thông báo SAML từ nhà cung cấp danh tính và sử dụng nó để thiết lập kết nối với máy chủ phụ trợ của chúng tôi.

  1. Để có được token

    WSTrustChannelFactory GetTrustFactory() 
    { 
        var binding = new WS2007HttpBinding(TrustChannelBindingConfiguration); 
        return new WSTrustChannelFactory(binding, StServiceUri); 
    } 
    
    SecurityToken GetTokenFromSts() 
    { 
        using (var trustFactory = GetTrustFactory()) 
        { 
         // here is the code to set trustFactory.Credentials 
         trustFactory.TrustVersion = TrustVersion.WSTrust13; 
         var rst = new RequestSecurityToken 
            { 
             RequestType = RequestTypes.Issue, 
             AppliesTo = new EndpointReference(YourServiceUri), 
             KeyType = KeyTypes.Bearer 
            }; 
    
         var channel = (WSTrustChannel) trustFactory.CreateChannel(); 
         try 
         { 
          return channel.Issue(rst); 
         } 
         catch (MessageSecurityException msex) 
         { 
          channel.Abort(); 
          throw new EMException(msex.InnerException.Message, msex); 
         } 
        } 
    } 
    
  2. Sau đó token thu được được sử dụng trong dịch vụ gọi:

    securityToken = GetToken(); 
    
        // 2. Create a channel with issued token to YourServiceInterface 
        // create binding and turn off sessions 
        var binding = new WS2007FederationHttpBinding(FederationBinding); 
    
        try 
        { 
         var factory = new ChannelFactory<YourServiceInterface>(binding, 
              new EndpointAddress(YourServiceUri)); 
    
         factory.Credentials.SupportInteractive = false; 
    
         var channel = factory.CreateChannelWithIssuedToken(securityToken); 
    
         // 3. Call YourMethod() on secured channel 
         return channel.YourMethod(); 
    } 
    catch {...} 
    

Cách tiếp cận chính từ link vẫn chưa thực sự thay đổi - chúng tôi vừa thêm bộ nhớ đệm mã thông báo và kết hợp mã này trong khung xử lý kênh của chúng tôi. Mã được sử dụng để xác thực ứng dụng khách trên máy tính để bàn với máy chủ ADFS và sử dụng xác nhận quyền sở hữu trong máy chủ phụ trợ của chúng tôi để ủy quyền.

Các vấn đề liên quan