如何在网络服务和手机之间进行身份验证?

cho*_*bo2 7 .net c# asp.net-mvc web-services

我想制作一个Windows Mobile 6手机应用程序.此应用程序将与我想要的Web服务进行通信.

我对手机的网络服务和编程应用程序了解不多,所以我有几个问题.

  1. 我该如何进行身份验证?就像我的用户加载我的应用程序并转到登录页面.他们输入凭证.这将被发送到服务器并进行身份验证.现在我送回什么?是否有某种FormsAuthentication?

  2. 他们登录后我必须继续检查他们是否登录?就像在asp.net mvc中一样,我在所有标签上都有AuthorizeAttributes.这样,没有人可以只输入该动作方法的URL并能够访问它.但由于这是一个应用程序,我不确定他们是否可以(比方说)转到您的登录表单(第一个表单),然后以某种方式,在没有登录的情况下,转到您的主表单(登录表单之后的表单).

  3. Web服务是否具有asp.net mvc等授权标签?因为我可能需要沿着这些方面的东西来确保他们的网络中没有一种类型能够浏览我的webservice路径并访问我在其中制作的所有方法.

  4. 我正在制作一个asp.net mvc应用程序,当用户在我的网站上输入他们的凭据时.它发送的是我猜的是明文吗?到服务器哈希然后检查.我知道也许有一天,当我能负担得起它可能会让ssl更安全.

所以我的问题是如何将凭证从手机发送到服务器将不如我现在对我的网站的安全性更低?差不多?可以做些什么来使它更安全(再次是SSL?).

谢谢

Mic*_*icz 9

您还可以使用SOAP标头来传递用户凭据或身份验证令牌.您可以在Authentication Services for Web Services(使用SOAP标头)上找到有关如何执行此操作的文章,但总而言之,您创建了一个标头类:

using System.Web.Services.Protocols;

public class AuthHeader : SoapHeader
{
    public string Username;
    public string Password;
}
Run Code Online (Sandbox Code Playgroud)

您在Web服务上定义公共属性

public AuthHeader AuthenticationInfo;
Run Code Online (Sandbox Code Playgroud)

并向您希望只有经过身份验证的用户才能访问的任何Web方法添加一些属性:

[SoapHeader ("AuthenticationInfo", Required=true)]
[WebMethod]
public string HelloSecretWorld()
{
    if(!(AuthenticationInfo.UserName == "Hello" && AuthenticationInfo.UserName.Password == "World"))
        throw new AuthenticationException();

    return "Hello World";
}
Run Code Online (Sandbox Code Playgroud)

客户端代码如下所示:

MyWebService ws = new MyWebService();
ws.AuthenticationInfo = new AuthHeader {Username = "Hello", Password = "World"};
Console.Out.WriteLine(ws.HelloSecretWorld());
Run Code Online (Sandbox Code Playgroud)

这样您就不需要修改方法的签名来添加身份验证.