代码之家  ›  专栏  ›  技术社区  ›  Xaisoft

正在读取从Android应用程序发送到我的WCF REST服务的用户名和密码?

  •  1
  • Xaisoft  · 技术社区  · 14 年前

    我当前的WCF REST方法定义为:

    [OperationContract]
    [WebGet(UriTemplate = "{username}/{password}", ResponseFormat =                   
                                                            WebMessageFormat.Json)]
    string Login(string username, string password);
    

    http://service.com/login.svc/login ...

    但是我不希望用户名和密码像我在UriTemplate中指定的那样在url中传递。如何将android应用程序的用户名和密码接收到我的服务中,或者更好的是,如何更改我的登录方法以检索某些POST参数中的用户名和密码,这些参数可以在我的登录函数中处理,并根据sql成员资格数据库验证用户。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Adam Fyles    14 年前

    我们已经通过使用“Authorization”头完成了这项工作。客户机传递一组加密的凭证,我们在我们这边为它们生成一个令牌。下面是处理身份验证的HttpModule的BeginRequest方法的示例。我们使用自定义主体来处理令牌:

     private void BeginRequest(Object source, EventArgs e)
        {
            if (null == HttpContext.Current || String.IsNullOrEmpty(HttpContext.Current.Request.Headers["Authorization"]))
            {
                HttpContext.Current.Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
                HttpContext.Current.Response.End();
            }
    
            HttpContext context = HttpContext.Current;
            Regex matcher = new Regex(WfmConfigurationManager.GetAppSetting("AuthenticationPath"));
    
            if (!matcher.IsMatch(context.Request.Url.ToString(),0))
            {
                String authHeader = context.Request.Headers["Authorization"];
                IIdentity tokenIdentity = new TokenIdentity(authHeader);
    
                if (!tokenIdentity.IsAuthenticated)
                {
                    HttpContext.Current.Response.StatusCode = (Int32)HttpStatusCode.Unauthorized;
                    HttpContext.Current.Response.End();
                }
    
                IPrincipal tokenPrincipal = new TokenPrincipal(tokenIdentity, TokenAuthentication.GetRolesForUser(tokenIdentity));
                HttpContext.Current.User = tokenPrincipal;
            }
        }