你的位置:首页 > 软件开发 > ASP.net > webapi 中的本地登录

webapi 中的本地登录

发布时间:2016-07-27 16:00:12
WebApi 身份验证方式asp.net WebApi 中有三种身份验证方式个人用户账户。用户可以在网站注册,也可以使用 google, facebook 等外部服务登录。工作和学校账户。使用活动目录,Office 365等方式进行身份验证。Windows 身份验证。在局域网中使 ...

WebApi 身份验证方式

get='_blank'>asp.net WebApi 中有三种身份验证方式

  • 个人用户账户。用户可以在网站注册,也可以使用 google, facebook 等外部服务登录
  • 工作和学校账户。使用活动目录,Office 365等方式进行身份验证。
  • Windows 身份验证。在局域网中使用。

个人用户账户方式下又又两种登录方式:

  • 本地登录。用户在网站注册,网站保存用户的登录名和密码散列值。登录时,用户提供登录名和密码,网站使用 asp.net identity 系统进行身份验证。
  • 社交登录。使用 google, facebook 等外部服务登录。网站仍然为用户在数据库中创建一个记录,但是不会保存凭据。用户通过登录外部服务进行身份验证。

这两种登录方式的差别在于凭据流,不管采用哪个方式,WebApi 都使用 OAuth2 进行身份验证。

OAuth2 术语

  • Resource(资源)。受保护的数据。
  • Resource Server(资源服务器)。承载资源的服务器。
  • Resouce Owner(资源所有者)。可以授权访问资源的实体,用户是典型的资源所有者。
  • Client(客户端)。访问资源的应用程序。
  • Access token(访问令牌)。允许对资源进行访问的令牌。
  • Bearer token(不记名令牌)。这是访问令牌的一种,客户端不需要对其进行加密钥,不记名令牌应仅在 HTTPS 上使用,并且设置较短的有效时间。
  • Authorization server(授权服务器)。发出令牌的服务器。

实践中,资源访问器和授权访问器可以是同一个应用程序。

本地登录的凭据流程

对于本地登录方式,WebApi 使用 OAuth2 中定义的资源所有者密码授权类型。这种授权类型适用于资源所有者十分信任客户端的情形。

  1. 用户在客户端输入登录名和密码。
  2. 客户端将登录名和密码发送给授权服务器。
  3. 授权服务器对凭据进行验证,返回访问令牌。
  4. 客户端访问受保护的资源时,将令牌放在 HTTP Authorization 请求头中。

webapi 中的本地登录

下图是实现这个流程的具体程序结构

webapi 中的本地登录

在这里,WebApi的控制器是资源服务器。Authentication Filter 对令牌进行验证,Authorization Filter 决定是否授权。授权服务器和 Authentication Filter 通过 OWIN 中间件处理 OAuth2 标准规定的细节。

AccountController 使用 asp.net identity 管理用户数据。相关文件有:

  • \App_Start\IdentityConfig.cs
  • \Controllers\AccountController.cs
  • \Models\IdentityModels.cs
  • \Providers\ApplicationOAuthProvider.cs

配置授权服务器

在 Startup.Auth.cs 文件的 ConfigureAuth 方法中进行配置。

public void ConfigureAuth(IAppBuilder app){  // 将数据库上下文和用户管理器配置为对每个请求使用单个实例  app.CreatePerOwinContext(ApplicationDbContext.Create);  app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);  // 使应用程序可以使用 Cookie 来存储已登录用户的信息  // 并使用 Cookie 来临时存储有关使用第三方登录提供程序登录的用户的信息  app.UseCookieAuthentication(new CookieAuthenticationOptions());  app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);  // 针对基于 OAuth 的流配置应用程序  PublicClientId = "self";  OAuthOptions = new OAuthAuthorizationServerOptions  {    TokenEndpointPath = new PathString("/Token"),    Provider = new ApplicationOAuthProvider(PublicClientId),    AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),    AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),    //在生产模式下设 AllowInsecureHttp = false    AllowInsecureHttp = true  };  // 使应用程序可以使用不记名令牌来验证用户身份  app.UseOAuthBearerTokens(OAuthOptions);}

原标题:webapi 中的本地登录

关键词:web

web
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。