所以有人告诉我,我们的 PHP 应用程序可能需要支持使用 ADFS 的身份验证。
对于非 Microsoft 人员,ADFS 是什么?
它与 LDAP 之类的东西有何不同?
它是如何工作的?对 ADFS 服务器的典型请求中会包含哪些类型的信息?它是为身份验证和授权而设计的吗?
ADFS 服务器通常是否可以从 Internet 访问(而企业 AD 域控制器则不能)?
我试过阅读一些 Technet 文档,但它充满了微软的说法,并没有太大帮助。
维基百科更好(见下文),但也许 ServerFault 社区的一些人可以填补一些空白。
Active Directory 联合服务 (ADFS)是 Microsoft 开发的软件组件,可安装在 Windows Server 操作系统上,为用户提供对跨组织边界的系统和应用程序的单点登录访问。它使用基于声明的访问控制授权模型来维护应用程序安全并实现联合身份。
基于声明的身份验证是根据可信令牌中包含的有关其身份的一组声明来对用户进行身份验证的过程。
在 ADFS 中,通过在两个安全领域之间建立信任,在两个组织之间建立联合身份。一侧(帐户侧)的联合服务器通过 Active Directory 域服务中的标准方法对用户进行身份验证,然后发出一个令牌,其中包含有关用户的一系列声明,包括其身份。在另一端,即资源端,另一台联合服务器验证令牌并为本地服务器发出另一个令牌以接受声明的身份。这允许系统向属于另一个安全领域的用户提供对其资源或服务的受控访问,而无需用户直接向系统进行身份验证,也无需两个系统共享用户身份或密码的数据库。
在实践中,用户通常认为这种方法如下:
- 用户登录到他们的本地 PC(他们通常在早上开始工作时会这样做)
- 用户需要在合作伙伴公司的外联网网站上获取信息 - 例如获取定价或产品详细信息
- 用户导航到合作伙伴公司外联网站点 - 例如:http : //example.com
- 合作伙伴网站现在不需要输入任何密码 - 而是使用 AD FS 将用户凭据传递到合作伙伴外联网站点
- 用户现在已登录合作伙伴网站,并可以与“已登录”网站进行交互
来自https://en.wikipedia.org/wiki/Active_Directory_Federation_Services
从这个问题衍生出来:我真的需要 MS Active Directory 吗?2014年的新方向。
考虑到基本的 Windows 基础架构:
现在,让我们把它全部撕掉,并决定我们要上云。我们已签约将 Exchange/Sharepoint/File Services 移至 Office 365。SQL 现在也将托管在 Azure 之类的设备上。我们已经摆脱了对 AD-DNS 的需求,只需通过一个简单的 Windows DNS 服务器即可运行所有内容。我们仍然需要 802.1X,如果可能的话,我们希望对我们的各种云应用程序进行 SSO。本土和 3rd 方内部应用程序可能会保留,但能够使用内部用户数据库而不是 AD 身份验证
问题是……我们真的需要 Active Directory 吗?
或者更确切地说,AD 内部部署或什至通过 Azure 或类似 (ADFS) 托管,或者通过 Azure 或类似工具在托管 VM 上运行 ADDS。我们可以/应该看看其他类似 3rd 方 SSO 选项的东西,例如http://www.onelogin.com/partners/app-partners/office-365/或类似的可以提供 SSO 功能的东西,即使它很简单每个用户的 LastPass …
我刚刚实现了一个 ADFS 服务器,通过 SAML 2.0 将第三方聊天工具与我们的 Active Directory 连接起来。
到目前为止一切正常,但有一个小问题:只要用户登录,聊天工具就会自动为他创建一个帐户。这是一个问题,因为每个帐户都会产生费用。
有什么方法可以将 ADFS 的使用限制为一个 AD 组?
好的...这一切都是在我们的 Office 365 设置期间开始的。根据 Microsoft 的说法,您必须从 Exchange 中删除您的本地联合信任,验证域,然后将其添加回来……否则在验证域名时您会收到一条模糊的错误消息。
所以我这样做了……除了现在联邦信任被打破了。我从“Test-FederationTrust -Verbose”收到以下消息:
VERBOSE: [19:43:14.005 GMT] Test-FederationTrust : Retrieved Token Issuer Uri from Federation Metadata:
urn:federation:MicrosoftOnline.
VERBOSE: [19:43:14.005 GMT] Test-FederationTrust : Retrieved Token Issuer Certificate from Federation Metadata:
<snip>.
VERBOSE: [19:43:14.005 GMT] Test-FederationTrust : Retrieved Token Issuer Previous Certificate from Federation
Metadata: <snip>.
VERBOSE: [19:43:14.005 GMT] Test-FederationTrust : Retrieved Token Issuer End Point from Federation Metadata:
https://login.microsoftonline.com/extSTS.srf.
VERBOSE: [19:43:14.005 GMT] Test-FederationTrust : Retrieved Web Requestor Redirect End Point from Federation Metadata:
https://login.microsoftonline.com/login.srf.
VERBOSE: …Run Code Online (Sandbox Code Playgroud) 基于从网络团队收到的信息。我已经确定问题很可能与 WAN 上的应用程序服务器有关。
服务器和版本 Windows Server 2012 R2 ADFS 3.0
问题:更换证书并执行所需步骤后,QA 系统无法运行。日志中正在生成错误。
应用程序服务器日志:对端点 0.0.0.0:443 使用 SSL 配置时出错。错误状态代码包含在返回的数据中。错误代码 15021
Web 应用程序代理日志:Web 应用程序代理服务无法启动
Web 应用程序代理服务:服务因以下错误而终止:无法建立与服务器的连接。错误代码 7023
我正在配置服务提供商以使用 SSO 身份验证。为此,我将使用 AD FS 2.0。
我需要提供给 IdP 的 SAML 断言使用者的 URL 是什么?
我认为它可能是其中之一:
但我不确定。有任何想法吗?
我有一个 .net 应用程序,它连接到我的本地 ADFS 服务器(连接到我们的公司 AD 服务器)并且一切正常。我的问题是,我的 ADFS 能否与 Internet 上的其他 SSO 服务(如 Azure AD、AWS、Google 登录、Facebook、Twitter、OpenID 等)建立可信连接,以便我的应用程序可以使用来自多个可信来源的声明,而不是我的激活目录?
默认情况下,ADFS 3 响应包含“X-Frame-Options: DENY”HTTP 标头。这可以防止 ADFS 在 iframe 中运行,因为这为点击劫持攻击提供了机会。
然而,目前我的公司正在实施一个集成,其中应该对此安全规则进行例外处理:某个域上的页面应该能够在 iframe 中嵌入 ADFS。
然而,似乎 ADFS 不允许开箱即用地更改此设置。那么修改这个 HTTP 头的最好方法是什么?
例如 RFC ( https://tools.ietf.org/html/rfc7034#section-2.3.2.3 )中的建议?
想要在框架中呈现所请求内容的页面将其自己的来源信息提供给通过查询字符串参数提供要框架化的内容的服务器。
服务器验证主机名是否符合其标准,以便允许目标资源对页面进行框架化。例如,这可能通过查找允许构建页面的受信任域名白名单来实现。例如,对于 Facebook 的“Like”按钮,服务器可以检查提供的主机名是否与该“Like”按钮预期的主机名匹配。
如果在步骤 #2 中满足正确的条件,服务器会在“X-Frame-Options: ALLOW-FROM”中返回主机名。
- 浏览器强制执行“X-Frame-Options: ALLOW-FROM”标头。
我已经使用 ADFS3 实现了 SSO。我有一个用于注销的注销按钮,它在我的 ws-federation 被动端点上运行良好。在注销时,我将用户重定向到 logout.aspx 页面,并在那里我在页面加载时编写了代码
WSFederationAuthenticationModule authModule = FederatedAuthentication.WSFederationAuthenticationModule;
SignOutRequestMessage signOutRequestMessage = new SignOutRequestMessage(new Uri(authModule.Issuer), authModule.Realm);
String queryString = signOutRequestMessage.WriteQueryString();
Response.Redirect(queryString);
Run Code Online (Sandbox Code Playgroud)
其中一个应用程序使用 SAML,因此我创建了一个 SAML 断言消费者端点。所以当我打开这个应用程序并点击注销时它会抛出一个错误,当我查看 ADFS 的事件日志时,我看到
Encountered error during federation passive request.
Additional Data
Protocol Name:
wsfed
Relying Party:
Exception details:
Microsoft.IdentityServer.RequestFailedException: MSIS7055: Not all SAML session participants logged out properly. It is recommended to close your browser.
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.BuildSamlLogoutResponse(SamlContext samlContext, Boolean partialLogout, Boolean& logoutComplete)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.ProcessSignOut(SamlContext samlContext, String redirectUri, List`1 iFrameUris, Boolean partialLogout)
at Microsoft.IdentityServer.Web.Protocols.Saml.SamlProtocolHandler.PipelineInitiatedSignout(WrappedHttpListenerContext …Run Code Online (Sandbox Code Playgroud) 在我们的 AD 和 Office 365 中实施 AADC 后,我们接下来要部署混合 Exchange,是否必须使用 ADFS?谢谢!