【问题标题】:The NTLM authentication token is not supported不支持 NTLM 身份验证令牌
【发布时间】:2013-12-24 04:21:57
【问题描述】:

我正在使用 TeraData 和 ASP.NET MVC3 的集成安全性。尝试打开连接时出现以下异常。我需要做些什么来将令牌转换为可以接受的东西吗?

“/”应用程序中的服务器错误。 不支持 NTLM 身份验证令牌。 错误代码:-452984668 严重性:错误设施:DotNet 说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:Teradata.Net.Security.TdgssException:不支持 NTLM 身份验证令牌。 错误代码:-452984668 严重性:错误设施:DotNet

来源错误:

在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常来源和位置的信息。

堆栈跟踪:

[TdgssException:不支持 NTLM 身份验证令牌。 错误代码:-452984668 严重性:错误设施:DotNet] Teradata.Net.Security.Mechanisms.SPNEGOSession.AuthenticateAsClientImplementation(TdgssAuthenticationTokenExchange tokenAuthenticationExchange, String credential, String targetName) +4506 Teradata.Net.Security.Mechanisms.Session.AuthenticateAsClient(TdgssAuthenticationTokenExchange tokenAuthenticationExchange, String credential, String targetName) +159 Teradata.Client.Provider.WpSecurityManager.Action() +134

[TdException (0x80004005): [TeraGSS 安全库] [115022] TERAGSS 层发生异常。有关详细信息,请参阅内部异常。] Teradata.Client.Provider.WpSecurityManager.Action() +268 Teradata.Client.Provider.WpSession.Open(Int32 connectionTimeout, String password) +2258 Teradata.Client.Provider.Connection.Open(UtlConnectionString connectionString, UInt32 timeout) +1028 Teradata.Client.Provider.ConnectionPool.CreateConnection(UInt32 超时)+53 Teradata.Client.Provider.ConnectionPool.GetConnectionFromPool(Object owningObject) +820 Teradata.Client.Provider.ConnectionFactory.GetConnection(Object owningObject, UtlConnectionString connStr) +842 Teradata.Client.Provider.TdConnection.Open() +172 ProductDevelopmentRequestSystem.Data.AMAPS.MaterialRepository.get_Connection() +389 ProductDevelopmentRequestSystem.Data.AMAPS.MaterialRepository.GetSuffixPlantMapping() +107 ProductDevelopmentRequestSystem.Reports.Supply.SupplyDataLogic.GetAmapsPlantMappings() +114 ProductDevelopmentRequestSystem.Reports.Supply.SupplyDataLogic.GetData(SupplyReportData 数据) +120 ProductDevelopmentRequestSystem.Reports.Supply.SupplyReportLogic.Generate(SupplyReportData 数据)+115 ProductDevelopmentRequestSystem.Controllers.SupplyAndDemandController.Index(SupplyAndDemandViewModel 模型)+1836 lambda_method(闭包,ControllerBase,对象[])+127 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary2 parameters) +274 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 参数) +39 System.Web.Mvc.c_DisplayClass15.b_12() +120 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter 过滤器,ActionExecutingContext preContext,Func1 continuation) +637 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 过滤器,ActionDescriptor actionDescriptor,IDictionary`2 参数)+307 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +720 System.Web.Mvc.Controller.ExecuteCore() +162 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext) +305 System.Web.Mvc.c_DisplayClassb.b_5() +62 System.Web.Mvc.Async.c_DisplayClass1.b_0() +15 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +606 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.18055

【问题讨论】:

  • 会不会是 IIS 只为 Kerberos 配置而不包括 Ntlm?请参阅打开 Ntlm 的链接:support.microsoft.com/kb/215383
  • Teradata 实例是否支持 NTLM,使用 Teradata 的 SQL 助手(使用 ODBC/.Net 提供程序)或 Studio Express 使用 JDBC 等工具?
  • 我能够使用集成安全性和 RazorSQL 进行本地连接。在运行 Web 项目时,我还可以使用集成安全性和 Visual Studio 2010 进行本地连接。只有当我部署到开发服务器时。几乎就像 TeraData 不喜欢 ASP.NET 模拟一样。我不知道如何使它成为现实。
  • 你能解决这个问题吗?
  • @Mr.White 我们最终为 TeraData 创建了一个用户帐户,而不是使用集成身份验证。集成身份验证从未奏效。

标签: c# asp.net-mvc-3 teradata


【解决方案1】:

似乎在Teradata forums 上发布了相同的问题。他们被问及是否使用了集成身份验证。如果是,则需要提交一个错误,因为这表明 Kerberos 失败返回 NTLM。如果不需要集成身份验证,则需要更新连接字符串。

没有回应。

我认为这意味着它是一个常见的double-hop issue,可以通过运行正确的 Kerberos 实现或更改连接字符串以使用显式帐户来解决。

【讨论】:

  • 奇怪的是,当使用 IIS Express 在我的本地计算机上运行应用程序时,此问题不存在。我可以使用单点登录,然后使用带有“integrated-security:true”的连接字符串连接到 Teradata。但是,一旦将网站部署到运行 IIS 7.x 的非本地服务器上,单点登录就会自行内爆.. :(
  • 在您的本地环境中,您不是双跳。您的机器信任您的机器。您只需再跳一次即可访问您的数据库。部署后,您将从客户端跳转到 Web 服务器,如果不信任通过 kerberos 传递您的凭据,则您的安全上下文会死在那里。你的数据库连接试图传递这个无效的上下文,你得到了你的异常。
  • 如果是双跳问题,很容易测试。将凭据放入连接字符串中。如果这能解决问题,那就是双跳。如果没有,那就是其他问题。当然,我从未使用过单点登录,所以我不确定这是否与集成身份验证问题相同,但至少可以从某个地方开始。
  • 这是一个双跳问题,静态凭据(不是单点登录)有效。
  • “不支持 NTLM 身份验证令牌”这不是表示 IIS 正在尝试使用 NTLM 而不是 Kerberos 的指标吗?
【解决方案2】:

如果您的资源与 IIS 位于不同的服务器上(或者配置文件认为是,请尝试将名称交换为您尝试访问的资源的 IP 地址),那么您可能会遇到双跳问题,并且 NTLM 将除非您的资源位于为 Active Directory 委派设置的服务器上,否则用于进行身份验证。总之NTLM永远不会成功,你需要使用委托,Kerberos会看到http://blogs.msdn.com/b/besidethepoint/archive/2010/05/09/double-hop-authentication-why-ntlm-fails-and-kerberos-works.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    相关资源
    最近更新 更多