解决Windows ADFS问题的步骤

昨天我发布了一个关于我在ADFS中遇到的错误的具体问题 ,让我难住了。 由于我在解决基于Windows的产品方面的经验非常有限,我认为如何解决这个问题的build议将非常有帮助。

  1. 我如何获得更多信息? 我已经做了这个 ,没有得到任何新的信息,有没有其他的日志可能有帮助?
  2. 谷歌废话错误信息的每一个变化。 是否有其他地方发布错误的帮助?

你会从这里采取什么措施进一步解决问题?

这看起来很有希望

http://social.technet.microsoft.com/wiki/contents/articles/3910.extending-the-error-diagnostics-of-adfs.aspx

ADFS的一个非常有用的方面是在ADFS附带的ASPX页面中具有代码级别的function。 这些对于添加代码来使用默认的家庭领域或者为了自定义的原因改变ADFS的行为是有帮助的。 这些还提供了一个简单的方法来对收到的SAMLResponses进行自定义validation。 这也可以用于在被ADFS使用之前处理SAMLResponse,以获得ADFS未提供的某些function。

通常会有几个标准的事情来检查传入的SAMLResponses和ADFS也会这样做,但可能并不总是给你一个人类可读或可理解的错误信息。 这些的一些例子是:

  1. 在ADFSconfiguration时检查签名(正确的algorithm,使用正确的证书)
  2. 检查ADFSconfiguration的encryption
  3. 等等…

检查收到的SAMLResponse中的这些典型详细信息将帮助您识别问题,以便您的合作伙伴可以快速处理问题。

一个常见的要求是能够将SAMLResponselogging到ADFS接收到的每个请求的数据库中。 为此,只需将一些代码添加到global.asax.cs文件中,如下面的代码片段所示:

public void Application_BeginRequest() { HttpRequest request = HttpContext.Current.Request; HttpResponse response = HttpContext.Current.Response; if (!String.IsNullOrEmpty(request["SAMLResponse"])) { SaveSamlResponseToDB(request["SAMLResponse"].ToString()); } } 

这样做后,您可以操纵SAMLResponse并对其进行自定义validation。 这提供了一种额外的validation机制,超出了目前的ADFS,对于各种testing场景非常有帮助。

基于Windowspipe理员的build议,我做了以下解决了这个问题。

  1. 确保W32Time服务使用NTP(不是)
  2. 确保所有更新都已安装(他们是)
  3. 确保所有服务都在服务帐户下运行,而不是域控制器帐户(他们不是)
  4. 确保ADFS在服务帐户下运行后,重新创build服务提供者

此时,错误只发生在AD用户的一个子集中。 在这些用户身上,我重置了他们的密码,然后解决了这个问题。

虽然我不完全确定为什么这开始发生或者这些步骤如何解决它,我的理论是,不使用一个服务帐户来pipe理所有这些文件导致写入的文件不能被运行在不同帐户下的进程读入。

希望这有助于某人。