beo*_*ulf 4 c# authentication owin asp.net-mvc-5 asp.net-web-api2
我正在尝试为ASP.NET MVC 5网站/应用程序的web api控制器部分创建自定义筛选器,以检查我已存储在数据库中的特定令牌的请求标头.我发现的大多数示例都包含用户凭据,然后使用身份对用户进行了身份验证.不完全是我想要的.
这是我发现的目前正在关注的教程.
Web API应该只处理"外部"HTTP调用,网站端目前将拥有自己的控制器(但可能会有变化).
如果可能,此过滤器应与已存在的身份2系统连接.
我所做的是然后我发送用户凭据,为用户分配一个令牌,然后我想使用该令牌来验证请求.有没有办法可以根据令牌过滤请求,或者我是否需要使用Owin身份及其令牌管理.我正在使用移动客户端(目前是iOS,也将包括android)来拨打电话.我可以参考的任何示例或教程?
令牌当前是字母数字字符和符号的随机组合.
谢谢.
PS我可以在需要的地方发布代码片段和内容.
编辑:HTTPRequests将根据它们是否包含我们的数据库/系统中存在的令牌进行过滤.包含令牌或在我们的系统中不存在的请求将收到未经授权的错误(401?)
小智 9
假设您认为向每个请求发送用户名和密码都不好.请在下面的实现中输出用户名和密码,因为我们不会在每个请求中发送用户名和密码.
public class AuthenticationFilter : AuthorizationFilterAttribute
{
/// <summary>
/// read requested header and validated
/// </summary>
/// <param name="actionContext"></param>
public override void OnAuthorization(HttpActionContext actionContext)
{
var identity = FetchFromHeader(actionContext);
if(identity != null)
{
var securityService = actionContext.ControllerContext.Configuration.DependencyResolver.GetService(typeof(ILoginService)) as ILoginService;
if (securityService.TokenAuthentication(identity))
{
CurrentThread.SetPrincipal(new GenericPrincipal(new GenericIdentity(identity), null), null, null);
}
else
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
return;
}
}
else
{
actionContext.Response = new HttpResponseMessage(HttpStatusCode.BadRequest);
return;
}
base.OnAuthorization(actionContext);
}
/// <summary>
/// retrive header detail from the request
/// </summary>
/// <param name="actionContext"></param>
/// <returns></returns>
private string FetchFromHeader(HttpActionContext actionContext)
{
string requestToken = null;
var authRequest = actionContext.Request.Headers.Authorization;
if (authRequest != null && !string.IsNullOrEmpty(authRequest.Scheme) && authRequest.Scheme == "Basic")
requestToken = authRequest.Parameter;
return requestToken;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20475 次 |
| 最近记录: |