Web Api2 用户认证模板解析---本地用户
本文我们将把关注Visual Studio用户认证模板中的 本地用户名/密码帐号特性。他们将其分为了两部分:帐户控制器具备如创建帐号和修改密码等功能;另一部分是在OAuth2认证服务器中进行的认证。我们从创建一个账户开始:
为了创建一个账户,我们需要Post到/api/account/register 节点,对应到帐号控制器的Register方法,这个方法允许匿名访问。
客户端可以这样做:
用户注册private async Task Register(string userName, string password)
{
var client = new HttpClient { BaseAddress = _baseAddress }; var data = new Dictionary<string, string>
{
{ “UserName”, userName },
{ “Password”, password },
{ “ConfirmPassword”, password }
}; var response = await client.PostAsync(
“api/account/register”,
new FormUrlEncodedContent(data));
response.EnsureSuccessStatusCode();
}
帐号控制器会使用ASP.NET的身份框架在本地数据库中创建一个新用户(在确认密码和确认密码相同的前提下)。
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
IHttpActionResult errorResult = GetErrorResult(result); if (errorResult != null)
{
return errorResult;
} return Ok();
在真实的应用中你或许想要进行邮箱验证和其他的验证步骤,但那已经超出了例子的范围。客户端可以通过内建的OAuth2资源所有者节点为用户申请一个令牌,该节点为/token。更多的背景信息请参阅here.
客户端使用OAuth2Client 类似这样:
private async Task<TokenResponse> RequestToken(
string userName, string password)
{
var client = new OAuth2Client(
new Uri(_baseAddress.AbsoluteUri + “/token”));
return await client.RequestResourceOwnerPasswordAsync(userName, password);
}
微软提供的这个认证模板连接了一个所谓的提供商(ApplicationOAuthProvider.cs)作为认证服务器中间件。其中负责验证用户认证信息并创建一个认证“票”并将其转换为访问令牌返回的相关的方法是:calledGrantResourceOwnerCredentials 。
var user = await userManager.FindAsync(context.UserName, context.Password); if (user == null)
{
context.SetError(
“invalid_grant”, “The user name or password is incorrect.”);
return;
} var oAuthIdentity = await userManager.CreateIdentityAsync(user,
context.Options.AuthenticationType);
var properties = CreateProperties(user.UserName);
var ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
注意:这个方法不仅进行了验证用户身份和创建令牌,它还将用户名作为了OAuth2返回中的一部分(作为一个额外的参数)。我猜测这仅仅是一个指导如何个性化的返回相关信息到客户端的示例,不需要强制进行一次额外的API访问来获取这些额外信息。由于这些信息没有签名,所以不要基于这个方法传输与安全相关的信息(对比OpenID连接身份令牌token)
注意2:这个方法也可以设置一个应用Cookie。但我不觉得这是一个好的理由。
使用访问令牌,客户端下载将被允许访问帐号控制器中其他的管理功能(如:用户信息,修改密码,设置密码等)或者其他任何使用[Authorize] 标记的控制器。如:
private async Task<string> GetUserInfo(string token)
{
var client = new HttpClient { BaseAddress = _baseAddress };
client.SetBearerToken(token); var response = await client.GetStringAsync(“api/account/userInfo”);
return response;
}
Web Api2 用户认证模板解析---本地用户的更多相关文章
- Web Api 2 用户认证模板解析-----外部用户认证模式
一般的社交提供商不提供一个Web Service进行身份验证(有很好的理由),而提供一个身份验证的界面,其中包含了某种协议如OpenID(连接)或使用OAuth2认证.这意味着客户端应用必须使用一个浏 ...
- 翻译:WebApi 认证--用户认证Oauth解析
The Web API v2用户认证模板提供了流行的应用用户认证场景,如.使用本地帐号的用户名密码认账 (包括创建用户.设置和修改密码)以及使用第三方的认证方式,如facebook,googl ...
- Django自定义用户认证系统之自定义用户模型
参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...
- Django (auth模块、User对象、用户认证、线上-用户认证)
一.auth模块 django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: authenticate() 提供了用户认证,即验证用户名以及密码是否正确,一般需要usern ...
- Django - 用户认证、用户组、用户权限
https://www.cnblogs.com/ccorz/p/6358074.html auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和a ...
- 使用外部LDAP用户认证后,DJANGO用户如何作登陆的操作?
公司的要求,使用公司的UM帐号验证密码,然后,在DJANGO里登陆. 因为没有authenticate函数,只有login函数,所以不能简单的使用用户来login,而需要加一个backend参数... ...
- CentOS6.5下搭建ftp服务器(三种认证模式:匿名用户、本地用户、虚拟用户)
CentOS 6.5下搭建ftp服务器 vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费,此 ...
- Django学习笔记(13)——Django的用户认证(Auth)组件,视图层和QuerySet API
用户认证组件的学习 用户认证是通过取表单数据根数据库对应表存储的值做比对,比对成功就返回一个页面,不成功就重定向到登录页面.我们自己写的话当然也是可以的,只不过多写了几个视图,冗余代码多,当然我们也可 ...
- 记录一次centos6.4版本的VSFTP本地用户登陆的配置
其实vsftp是一个非常常用而且简单的服务,但是假如服务不是你配置的前者没有留下参考档案,的确是件头疼的事儿,特此记录下. 首先是vsftp的安装当然安装有源码的编译和yum等 这里我选择rpm包的y ...
随机推荐
- HDU2033 人见人爱A+B 分类: ACM 2015-06-21 23:05 13人阅读 评论(0) 收藏
人见人爱A+B Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- C#实现office文档转换为PDF或xps的一些方法( 转)
源博客http://blog.csdn.net/kable999/article/details/4786654 代码支持任意office格式 需要安装office 2007 还有一个office20 ...
- MacOSX快捷键
[MacOSX快捷键] 关闭显示器:Shift + Ctrl + 退出键 休眠:Command + Option + 退出键 关机:Ctrl + Option + Command + 退出键 打开文件 ...
- C++11常量表达式
[C++11之常量表达式] 关键字:constexpr: 中文学名:常量表达式. constexpr用于把运行期计算放置在编译期. 使用constexpr有3个限制: 1.函数中只能有一个return ...
- CSS画出的各种形状图
利用CSS可以画出各种需要的图形目录[1]矩形[2]圆形[3]椭圆[4]直角三角形[5]正三角形[6]平行四边形[7]梯形[8]六角星[9]六边形[10]五角星简单图形 矩形div{ width: 1 ...
- c++中__declspec用法总结
“__declspec”是Microsoft c++中专用的关键字,它配合着一些属性可以对标准C++进行扩充.这些属性有:align.allocate.deprecated. dllexport.dl ...
- redis安装配置与测试
phpredis: https://github.com/nicolasff/phpredis http://www.cnblogs.com/ikodota/archive/2012/03/05/ph ...
- “非常PHP学习网”(www.veryphp.cn)一期上线
制作“非常PHP学习网”花了国庆整个假期,其实是从电脑学习网(http://www.why100000.com,域名刚续费)改写盗版而来的. 起初主要修改界面布局和颜色花费了大量时间(好像制作网站80 ...
- Server-U与IIS端口占用问题解决
在新版的ftp软件Server-U(11.X)中,由于其默认设置中监听了80端口,经常会导致IIS不能服务不能正常启用,下面记录如何修改server-u的80端口. 打开Server-U软件, ...
- jquery与ajax应用
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...