我当前的WCF REST方法定义为:
[OperationContract]
[WebGet(UriTemplate = "{username}/{password}", ResponseFormat =
WebMessageFormat.Json)]
string Login(string username, string password);
Android客户端应用程序将连接到该服务,假设它是http://service.com/login.svc/login ...
但我不希望像我在UriTemplate中指定的那样在url中传递用户名和密码。如何从Android应用程序接收用户名和密码到我的服务,或者更好的是,我如何更改我的登录方法以检索我可以在我的登录功能中处理的一些POST参数中的用户名和密码并验证用户一个sql成员资格数据库。
答案 0 :(得分:1)
我们通过使用“授权”标题完成了此操作。客户端传递一组加密的凭据,我们为他们生成一个令牌。以下是处理身份验证的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;
}
}