Authentication AD可以为我的Win桌面应用程序提供web服务的凭据吗?
我有一个正在运行的c#/dotnet Windows桌面应用程序,它通过点击我的web应用程序中的各种web服务来完成工作。当桌面应用程序启动时,它会提示用户输入用户名/密码,然后点击my login web服务,该服务返回会话令牌 我有一个拥有许多用户的大型org客户。该客户希望直接从其域控制器为我的组合桌面/web应用程序提供身份验证/授权。他们想要单点登录,所以我的桌面应用程序不会提示他们的用户输入用户名和密码 我的桌面应用程序如何从Windows(可能从用户的安全主体对象)检索可用的身份验证/授权令牌?我的web应用程序如何验证该令牌,以便信任桌面应用程序并向其发送会话令牌 (我的web应用程序在我的环境中运行,而不是在客户的域中运行。) 对于纯web应用客户,我通过SAML2和Active Directory/Federation服务成功地做到了这一点。SAML2舞蹈让我的用户浏览器将请求发布到客户的AD/FS服务器,然后该服务器将签名响应发布回我的web应用程序Authentication AD可以为我的Win桌面应用程序提供web服务的凭据吗?,authentication,active-directory,ldap,single-sign-on,desktop-application,Authentication,Active Directory,Ldap,Single Sign On,Desktop Application,我有一个正在运行的c#/dotnet Windows桌面应用程序,它通过点击我的web应用程序中的各种web服务来完成工作。当桌面应用程序启动时,它会提示用户输入用户名/密码,然后点击my login web服务,该服务返回会话令牌 我有一个拥有许多用户的大型org客户。该客户希望直接从其域控制器为我的组合桌面/web应用程序提供身份验证/授权。他们想要单点登录,所以我的桌面应用程序不会提示他们的用户输入用户名和密码 我的桌面应用程序如何从Windows(可能从用户的安全主体对象)检索可用的身份
但我不知道如何从桌面应用程序干净地完成它。有什么智慧吗?我应该先说一个事实,我从来没有这样做过,所以我不能给出确切的代码,但我可以为您指出正确的方向 您应该能够通过ADFS和Windows集成授权(WIA)实现这一点。在“纯web应用”中,浏览器在授权步骤中发送当前登录用户的凭据。在您的情况下,您的桌面应用程序需要执行浏览器通常会执行的所有操作。无论哪种方式,web服务端的设置都应该完全相同 在C#with
HttpClient
中,这是重要的部分:
var httpClient = new HttpClient(new HttpClientHandler()
{
UseDefaultCredentials = true
});
然后,每当您的httpClient
发送一个被401响应质询的请求时,它将自动使用用户的Windows凭据重新发送该请求。这正是web浏览器所能做的。所以当你拿到代币时就用这个
您可能必须在请求中发送一个用户代理字符串,因为ADFS似乎是
拥有令牌后,在对web服务的请求中使用令牌
关键是你在复制浏览器的功能。因此,如果您在设置HTTP请求的外观时遇到问题,那么可以从浏览器访问API中的GET请求,并使用浏览器的开发工具精确检查通信量的外观,并使用该信息在代码中复制相同的请求。您可以在github(jelledruyts)中查看此示例: 它具有使用Azure Active Directory和/或Windows Server Active Directory联合身份验证和授权服务的示例
我建议你读这篇文章。这本书有点老,但它是一个很好的概述/回顾 代币有许多不同的格式。对于今天的.NET应用程序, 然而,三种代币是最重要的。它们是 以下:
一旦这些声明可用,Windows就可以使用它们 应用程序,或两者兼而有之。索赔最常见的用途包括 以下:
身份验证类型:
身份识别技术
- Active Directory(AD)域服务(全功能目录服务、Kerbero票证的令牌源等)
- Active Directory联合身份验证服务(ADFS)(支持基于声明的应用程序,SAML令牌的令牌源
- Windows CardSpace
- Active Directory轻型目录服务(AD服务的子集)
- 标识生命周期管理器(ILM)(不同标识存储之间的同步)
- Windows授权管理器(用于RBAC的工具-基于角色的访问控制)
- Active Directory权限管理服务(RMS)
是