技術について言及していない - 私は自分の経験を共有することができます。 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);
}
}
}
を入手するには
は、次いで、得られたトークンはサービスコールで使用されます。
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サーバーに対してデスクトップクライアントを認証し、バックエンドサーバーのクレームを承認に使用するために使用されます。
基本的に、SAMLではクライアントがブラウザである必要はありません。本質的に「ブラウザ」とは、リダイレクトに従う方法を知っているクライアントのことで、十分に精巧なクライアントがリダイレクトを行うことができます。それでも、特にHTTP POSTリダイレクトがSAML認証に関係している場合は、悪魔が詳細にあります(これが最も確実です)。詳細は、使用する特定のテクノロジーによって異なる場合があります。 – SergGr
技術に関する制約はありません。おそらく、[Electron](https://electron.atom.io/)は、デスクトップアプリケーションを作成するためのnon-non-browser_(☺)フレームワークです。クッキーを処理し、リダイレクトをうまくフォローできます。 –