AJax技术

resource实现OAuth的注册、登录、注销和API调用(4)

字号+ 作者:H5之家 来源:H5之家 2017-09-10 14:02 我要评论( )

在Global.asax文件中添加以下几行代码: var formatters = GlobalConfiguration.Configuration.Formatters;var jsonFormatter = formatters.JsonFormatter;var settings = jsonFormatter.SerializerSettings;settin

在Global.asax文件中添加以下几行代码:

var formatters = GlobalConfiguration.Configuration.Formatters; var jsonFormatter = formatters.JsonFormatter; var settings = jsonFormatter.SerializerSettings; settings.Formatting = Formatting.Indented; settings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 启用CORS

在Nuget Package Manager Console输入以下命令:

Install-Package Microsoft.AspNet.WebApi.Cors

在WebApiConfig中启用CORS:

public static class WebApiConfig { public static void Register(HttpConfiguration config) { var cors = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(cors); // ... } } 类说明

在执行上述步骤时,VS已经帮我们生成好了一些类

image

IdentityModels.cs:包含ApplicationDbContext类和ApplicationUser类,无需再创建DbContext类

public class ApplicationUser : IdentityUser { // ... } public class ApplicationDbContext : IdentityDbContext<ApplicationUser> { // ... }

Startup.Auth.cs:用于配置OAuth的一些属性。

public partial class Startup { public static OAuthAuthorizationServerOptions OAuthOptions { get; private set; } public static string PublicClientId { get; private set; } // For more information on configuring authentication, please visit ?LinkId=301864 public void ConfigureAuth(IAppBuilder app) { // .. // Configure the application for OAuth based flow PublicClientId = "self"; OAuthOptions = new OAuthAuthorizationServerOptions { TokenEndpointPath = new PathString("/Token"), Provider = new ApplicationOAuthProvider(PublicClientId), AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"), AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), // In production mode set AllowInsecureHttp = false AllowInsecureHttp = true }; // Enable the application to use bearer tokens to authenticate users app.UseOAuthBearerTokens(OAuthOptions); // .. } }

这些OAuth配置项,我们只用关注其中的两项:

  • TokenEndpointPath:表示客户端发送验证请求的地址,例如:Web API的站点为,验证请求的地址则为。
  • UseOAuthBearerTokens:使用Bearer类型的token_type(令牌类型)。
  • ApplicationOAuthProvider.cs:默认的OAuthProvider实现,GrantResourceOwnerCredentials方法用于验证用户身份信息,并返回access_token(访问令牌)。

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { // ... }

    通俗地讲,客户端输入用户名、密码,点击登录后,会发起请求到。
    token这个请求在服务端执行的验证方法是什么呢?正是GrantResourceOwnerCredentials方法。

    客户端发起验证请求时,必然是跨域的,token这个请求不属于任何ApiController的Action,而在WebApiConfig.cs中启用全局的CORS,只对ApiController有效,对token请求是不起作用的。
    所以还需要在GrantResourceOwnerCredentials方法中添加一行代码:

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { context.Response.Headers.Add("Access-Control-Allow-Origin", new []{"*"}); // ... }

    IdentityConfig.cs:配置用户名和密码的复杂度,主要用于用户注册时。例如:不允许用户名为纯字母和数字的组合,密码长度至少为6位…。

    隐藏代码

    public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) { var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); // Configure validation logic for usernames manager.UserValidator = new UserValidator<ApplicationUser>(manager) { AllowOnlyAlphanumericUserNames = false, RequireUniqueEmail = true }; // Configure validation logic for passwords manager.PasswordValidator = new PasswordValidator { RequiredLength = 6, RequireNonLetterOrDigit = true, RequireDigit = true, RequireLowercase = true, RequireUppercase = true, }; // ... return manager; } 使用Postman测试GET和POST请求

    测试GET请求

    image

    GET请求测试成功,可以获取到JSON数据。

    测试POST请求

    image

    POST请求测试不通过,提示:验证不通过,请求被拒绝。

    基于$.ajax实现注册、登录、注销和API调用

    服务端的环境已经准备好了,现在我们就逐个实现用户注册、登录,以及API调用功能吧。

    注册

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • ztree点击文字勾选checkbox,radio实现方法

      ztree点击文字勾选checkbox,radio实现方法

      2017-09-10 15:01

    • Ajax实现--javascript

      Ajax实现--javascript

      2017-09-06 11:03

    • ajax php 实现写入数据库

      ajax php 实现写入数据库

      2017-09-04 17:03

    • 用ajax实现的自动投票的代码javascript技巧

      用ajax实现的自动投票的代码javascript技巧

      2017-09-04 13:01

    网友点评
    :