2015-01-13 10 views
9

SAMLベースのSSO認証を実行した後、SharePointサーバーへのWebサービスメソッド呼び出しを行うデスクトップベースのクライアントアプリケーションを作成する必要があります。SAMLを使用するSSOのデスクトップクライアントアプリケーション

SAML SSOは、すべての詳細を処理するブラウザから主に使用されることがわかりました。 this questionによると、非ブラウザベースのクライアントを有効にするためのSAML 2.0にはECPと呼ばれる技術があるようです。

ただし、SharePoint 2010/2013のような一部のアプリケーションでは、SAML 1.1のみがサポートされています。この場合には何が使えますか?

+1

基本的に、SAMLではクライアントがブラウザである必要はありません。本質的に「ブラウザ」とは、リダイレクトに従う方法を知っているクライアントのことで、十分に精巧なクライアントがリダイレクトを行うことができます。それでも、特にHTTP POSTリダイレクトがSAML認証に関係している場合は、悪魔が詳細にあります(これが最も確実です)。詳細は、使用する特定のテクノロジーによって異なる場合があります。 – SergGr

+0

技術に関する制約はありません。おそらく、[Electron](https://electron.atom.io/)は、デスクトップアプリケーションを作成するためのnon-non-browser_(☺)フレームワークです。クッキーを処理し、リダイレクトをうまくフォローできます。 –

答えて

1

技術について言及していない - 私は自分の経験を共有することができます。 WCFサービスを使用しているデスクトップアプリケーション(WPF)にSSOが必要です。私はこのlinkからの情報から始めました。解決策は、IDプロバイダからSAMLトークンを取得し、それを使用してバックエンドサーバーへの接続を確立するためにWIFを使用することです。トークン

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); 
     } 
    } 
} 
  • を入手するには

    1. は、次いで、得られたトークンはサービスコールで使用されます。

      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 {...} 
      

    linkからの主なアプローチは、実際にされていません変更されました。トークンキャッシングを追加し、このコードをチャンネル処理フレームワークに組み込みました。 このコードは、ADFSサーバーに対してデスクトップクライアントを認証し、バックエンドサーバーのクレームを承認に使用するために使用されます。

  • 関連する問題