c# – ASP.NET Web Api身份验证方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – ASP.NET Web Api身份验证方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2857字,纯文字阅读大概需要5分钟。
内容图文
![c# – ASP.NET Web Api身份验证方法](/upload/InfoBanner/zyjiaocheng/772/81d64cb7835c4b9d93ae26c5181523cf.jpg)
我正在尝试为我的web api实现身份验证.
我已经阅读了关于api身份验证的不同技术,令牌技术对我来说是最合理的.
我阅读了有关如何在asp.net中实现基于令牌的身份验证的不同文章,但它们都依赖于不同的库,如OAuth或Owin,它们也提供了自己的数据库交互方法.
问题是我已经实现了与抽象存储库和实体的数据库交互,我想知道如何在不干扰我当前设计的情况下轻松简单地实现api身份验证.
(顺便说一下,我的项目建立在一个空的web api项目之上,所以它并没有提供所有的bootstrap和身份验证类).
谢谢
解决方法:
我见过的一个解决方案是使用.NET的HttpApplicationState类并在appstate中存储令牌;这样你就不会直接搞乱Session(这将是一个REST反模式),但你仍然可以跟踪所有当前登录的用户,并在应用程序中使用HttpContext / HttpActionContext来x-ref活动标记.使用HttpActionContext的好处是它是线程安全的,而HttpContext不是,所以你可以锁定appstate,弄乱单个请求的HttpContext,然后解锁appstate以允许其他线程进入.
由于锁定/解锁appstate会占用应用程序,我不确定这个解决方案的扩展程度如何,但无论如何它都在这里. . .
概要:
当用户首次登录时,为他/她生成令牌并存储在appstate中.然后,您可以使用自定义属性标记需要身份验证的任何API调用(或需要存储在该用户上的其他信息),该属性在appstate中检查该令牌,并在API调用中将令牌名称作为标头发送(例如“{token” -name:TOKEN}“).
这是一个简短的例子:
[在控制器方法中首次在登录时激活:]
CustomUserObject user = new CustomUserObject();
//store user props
string token = Guid.NewGuid().ToString();
//create AppState instance, mine's called _appState
//...
_appState.Lock();
_appState[token] = user;
_appState.UnLock();
//...
[然后在global.asax:]
public class CustomAuthorize : System.Web.Http.AuthorizeAttribute
{
HttpRequestMessage request = actionContext.ControllerContext.Request;
string token = string.Empty;
if (request.Headers.GetValues("token-name") != null)
{
token = request.Headers.GetValues("token-name").FirstOrDefault().ToString();
IAppStateService appService; //<--- I've created a custom service tier class for appstate stuff
//Get appState instance, however makes sense for you.
//I'm using repo pattern with UnitOfWork, so mine looks like this...
//"IContainer ioc = DependencyResolution.IoC.Initialize();"
//"IAppStateService appService = ioc.GetInstance<IAppStateService>();"
appService.SetHttpApplicationState(HttpContext.Current.Application);
bool isAuthorized = appService.CheckTokenAndDoStuff(token);
//inside that method ^^^ you'll do stuff like
//"_appState.Lock();"
//"if (_appState[token] == null) return false" (or whatever)
//"_appState.Unlock();"
}
if (isAuthorized)
{
HttpResponseMessage resp = request.CreateResponse(HttpStatusCode.OK);
resp.Headers.Add("AuthenticationToken", token);
resp.Headers.Add("WWW-Authenticate", "Basic");
resp.Headers.Add("AuthenticationStatus", "Authorized");
}
return isAuthorized;
}
[然后在webapi]
[HttpPost]
[CustomAuthorize]
public HttpResponseMessage NameOfMethod(...)...
…那应该为你的appstate检查你的用户令牌.只需确保在您的请求标头中包含您的令牌,并确保在您的响应标头中包含Basic Auth信息.
内容总结
以上是互联网集市为您收集整理的c# – ASP.NET Web Api身份验证方法全部内容,希望文章能够帮你解决c# – ASP.NET Web Api身份验证方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。