我有一个Android应用程序,对学生的登录表单,我想在网上API取决于身份验证的Android应用程序来调用Web API服务
我已搜查在SQL Server中存储的数据来检查学生证件网络和观看许多影片,谈论许多情况下,没有什么帮助我。
所有我想要的是我的休息服务自定义验证(所以我应该向每个请求的凭据)
- 我应该在asp.net的Web API服务做
- 我怎么能实现在Android应用程序
我有一个Android应用程序,对学生的登录表单,我想在网上API取决于身份验证的Android应用程序来调用Web API服务
我已搜查在SQL Server中存储的数据来检查学生证件网络和观看许多影片,谈论许多情况下,没有什么帮助我。
所有我想要的是我的休息服务自定义验证(所以我应该向每个请求的凭据)
我已经使用安全基本身份验证,所以我应该提供的base64编码
username:password
在标题为每个请求如下
授权:基本“编码的用户名:密码
httpGet.setHeader("Authorization", "Basic "+encodeUsernameAndPassword());
在服务器端我已实施的消息处理程序
public class BasicAuthenticationHandler : DelegatingHandler
{
public readonly IAuthenticationService authService;
public BasicAuthenticationHandler(IAuthenticationService service)
{
this.authService = service;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
AuthenticationHeaderValue authHeader = request.Headers.Authorization;
if (authHeader == null || authHeader.Scheme != "Basic")
{
return Unauthorized(request);
}
string encodedCredentials = authHeader.Parameter;
var credentialsBytes = Convert.FromBase64String(encodedCredentials);
var credentials = Encoding.ASCII.GetString(credentialsBytes).Split(':');
if (!authService.Authenticate(credentials[0], credentials[1]))
{
return Unauthorized(request);
}
string[] roles = null;//todo
IIdentity identity = new GenericIdentity(credentials[0], "Basic");
IPrincipal user = new GenericPrincipal(identity, roles);
HttpContext.Current.User = user;
return base.SendAsync(request, cancellationToken);
}
似乎你没有搜索“基于Web API令牌的身份验证”;)无论如何,你需要实现是非常简单的。 您需要使用OAuth 2.0资源所有者凭证流程,这意味着您只想为特定终端提供用户名/密码一次,即(/令牌),然后如果用户名/密码有效,您获得称为承载访问令牌的东西。 该令牌在指定期限内有效,您可以在Web API中对此进行配置。 一旦你获得访问令牌,你需要将它安全地存储在你的android应用程序中,然后使用授权标题(持有者方案(。 )写下非常详细的内容后覆盖您的方案100%,请检查后Token Based Authentication,让我知道,如果你需要进一步的帮助。