【问题标题】:how to authenticate user of ASP.NET web service which is part of ASP.NET web application?如何验证作为 ASP.NET Web 应用程序一部分的 ASP.NET Web 服务的用户?
【发布时间】:2010-01-21 19:31:15
【问题描述】:

我有一个使用表单身份验证的 C# ASP.NET 3.5 Web 应用程序。用户在 login.aspx 上使用他们的用户名和密码登录,使用自定义身份验证逻辑进行身份验证,然后被定向到 input.aspx,在那里他们输入一些参数并在 output.aspx 上获得响应。如果他们尝试访问 input.aspx 而不进行身份验证,他们将被重定向到 login.aspx。

同样的用户希望能够在 Unix 环境中使用此 Web 应用程序的功能,而无需使用 UI。所以我向这个 Web 应用程序添加了一个 Web 服务文件 (.asmx)。我没有为此 Web 服务创建单独的项目,因为 Web 服务使用代码文件,即现有 Web 应用程序的 global.asax 中的代码,我不应该为 Web 服务复制该代码。

Web 服务功能现在可以正常工作,但我不知道如何验证用户身份。 Web 服务客户端将发送一次用户名和密码(可能使用“登录”Web 方法,我可以编写它来验证它们)然后应该能够发送多个请求(可能直到他们调用“注销”Web 方法或直到他们的会话/cookies 过期)。

对于不重定向到 login.aspx 页面的 Web 请求,我使用 web.config 中的位置标记从 Forms 身份验证中排除了 .asmx 文件。 (我不知道那是不是要走的路。)但是我认为用户没有在 Web 应用程序中进行身份验证,因此服务使用的 Web 应用程序代码将无法访问,对吗?

【问题讨论】:

    标签: asp.net-3.5 web-services web-applications authentication


    【解决方案1】:

    我建议快速阅读此链接 (http://msdn.microsoft.com/en-us/library/ms977327.aspx),然后继续阅读此链接 (http://msdn.microsoft.com/en-us/library/9z52by6a(VS.80).aspx)。自定义安全标头可能是您希望在表单身份验证之外保护 Web 服务的地方。这确实意味着每个方法调用都需要提供标头。

    【讨论】:

    • 谢谢。当 Web 服务对用户进行身份验证时,Web 应用程序需要知道该用户已经登录,类似于用户使用 Web 表单 login.aspx 登录时。
    • 这就是 SOAP 标头可以完成的工作。嵌入其中的凭据可以相同。只需为每个请求传递/附加它们。
    • 好的,谢谢,如果用户凭据在 Web 请求的 SOAP 标头中传递,请求不会重定向到 login.aspx 页面吗?
    • 不,如果您将其从 FormsAuthentication 中排除,如您所述,则必须独立处理 SOAP 标头。但是,正如您将看到的,身份验证源可以是相同的机制。
    • 好的,谢谢,那么 global.asax、.cs 文件中的代码和 Web 应用程序中缓存数据集中的数据是否可用于 Web 服务?我正在阅读:code-magazine.com/… 本文中的登录方法是否足够?客户端应该只传递一次登录凭据。
    猜你喜欢
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2011-05-02
    相关资源
    最近更新 更多