Asp.net Api中使用OAuth2.0实现“客户端验证”

一。实现继承自OAuthAuthorizationServerProvider的类,实现以“客户端验证”方式传入的相关认证和access_token发放。

public class MyOwnOAuthProvider:OAuthAuthorizationServerProvider
    {

        private static readonly Logger logger = LogManager.GetLogger("MyOwnOAuth");
        /// <summary>
        /// 客户端认证
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
        {
            string clientId;
            string clientSecret;

            //获取客户端传入的用户名和密码
            context.TryGetFormCredentials(out clientId,out clientSecret);

            logger.Info("用户名:"+clientId+" 密码:"+clientSecret+" 登陆网站...");

            //可以使用自己的数据验证,如通过数据库查询等方式
            if (clientId == "MyOwnApp" && clientSecret == "ctmdsh!320")
            {
                context.Validated(clientId);
            }

            return base.ValidateClientAuthentication(context);
        }

        /// <summary>
        /// 方法中对客户端进行授权 授权后发放access token
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public override Task GrantClientCredentials(OAuthGrantClientCredentialsContext context)
        {

            var oAuthIdentity = new ClaimsIdentity(context.Options.AuthenticationType);
            oAuthIdentity.AddClaim(new Claim("MyOwnApp", "ljx"));
            //API中可以使用一下方法获取其中的值。
            // var identity = (ClaimsIdentity)User.Identity;
            //var mayiAccount = identity.FindFirstValue("MyOwnApp");
            var ticket = new AuthenticationTicket(oAuthIdentity,new AuthenticationProperties());
            context.Validated(ticket);

            logger.Info("已对用户Ljx发放access_token...");

            return base.GrantClientCredentials(context);
        }
    }

  

重载ValidateClientAuthentication方法,实现客户端验证,重载GrantClientCredentials方法,实现access_token的发放。

二。通过相关配置,设置自己创建的Provider为Authroize的处理类。1.在App_start文件夹中找到Startup.Auth,找到OAuthOptions方法,修改对应的Provider完成配置:
    OAuthOptions = new OAuthAuthorizationServerOptions
            {
                TokenEndpointPath = new PathString("/Token"),
                Provider = new MyOwnOAuthProvider(),
               // AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
                //在生产模式下设 AllowInsecureHttp = false
                AllowInsecureHttp = true
            };

  

MyOwnOAuthProvider处替换为我们自己创建的验证逻辑类即可。

三。在api中对controller或者action加入[Authorize]属性即可。

四。注意如果要实现跨域访问,需要在Startup.Auth文件的ConfigureAuth方法中加入
app.UseCors(CorsOptions.AllowAll);

  当然,需要首先使用Nuget安装Microsoft.Owin.Cors的引用。

五。在客户端实现响应的调用。

1.设置$.ajax的提交之前的处理方法:

$(function () {

    $.ajaxSetup({
        cache: false,
        beforeSend: function (xhr, option) {

            var opentId = "MyOwnApp";
            var openSecret = "ctmdsh!320";

            //  alert("start");

            $.ajax({
                type: ‘post‘,
                async: false,
                url: hosturl + "token",
                data: {
                    client_id: opentId,
                    client_secret: openSecret,
                    grant_type: "client_credentials"
                },
                tokenSkip: true,
                success: function (data) {

                    xhr.setRequestHeader("Authorization", "Bearer " + data.access_token);

                }

            });

            }

        },
        complete: function () {

        },
        error: function (a) {

            if (typeof console.log === "function") {

                console.log(a.responseText);
            }

        }

    });

})

  

client_id指明用户,client_secret指明密码,grant_type: "client_credentials"指明验证方式。

2.在对应页面直接调用响应的API接口即可。
    $(function () {

        $.ajax({
            type:"get",

            url: "http://localhost:51067/api/values",

            success: function (data) {
                alert(data);
            }
        });

    })

  

				
时间: 2024-08-15 00:46:42

Asp.net Api中使用OAuth2.0实现“客户端验证”的相关文章

ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

原文:ASP.NET没有魔法--ASP.NET MVC使用Oauth2.0实现身份验证 随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的形式开放给第三方的,身份验证这一功能已经演化为一个服务,很多大型应用中都有自己的身份验证服务器甚至集群,所以普通的身份验证方式已经不能满足需求. 在.Net领域中也有一些开源的身份验证服务器组件,如Identit

在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client

在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client 阅读目录 验证代码流程 Refreshing a Token Built-In Providers 这个包能够让你以很简单的方式在在PHP应用中集成OAuth2.0身份验证. 用法 验证代码流程 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 4

ASP.NET MVC3中使用IClientValidatable接口实现客户端和服务器端同时验证

例如:Range.RegularExpression.Required.StringLength等验证属性,这些属性极大的方便了服务器端的验证,同时我们还可以自定义验证属性来满足我们特殊的需求,MVC3的出现进一步提升了验证的便捷性,具体体现在,新增了IValidatableObject和IClientValidatable接口,以及默认支持Range.RegularExpression.Required.StringLength等验证属性在客户端和服务器端进行验证. IValidatableO

SpringMVC中文件上传的客户端验证

SpringMVC中文件上传的客户端验证 客户端验证主要思想:在jsp页面中利用javascript进行对文件的判断,完成验证后允许上传 验证步骤:1.文件名称 2.获取文件的后缀名称 3.判断哪些文件类型允许上传 4.判断文件大小 5.满足条件后跳转后台实现上传 前台界面(验证上传文件是否格式满足要求): <body> <h2>文件上传</h2> <form action="upload01" method="post" 

在ASP.NET中实现OAuth2.0(一)之了解OAuth

1.什么是OAuth2.0 是一个开放授权标准,允许用户让第三方应用访问该用户在某一个网站或平台上的私密资源(如照片.视频.联系人等),而无须将用户名和密码提供给第三方应用 2.OAuth2.0授权模式 授权码模式(authorization code).简化模式(implicit).密码模式(resource owner password credentials).客户端模式(client credentials)

Spring Cloud 微服务中搭建 OAuth2.0 认证授权服务

在使用 Spring Cloud 体系来构建微服务的过程中,用户请求是通过网关(ZUUL 或 Spring APIGateway)以 HTTP 协议来传输信息,API 网关将自己注册为 Eureka 服务治理下的应用,同时也从 Eureka 服务中获取所有其他微服务的实例信息.搭建 OAuth2 认证授权服务,并不是给每个微服务调用,而是通过 API 网关进行统一调用来对网关后的微服务做前置过滤,所有的请求都必须先通过 API 网关,API 网关在进行路由转发之前对该请求进行前置校验,实现对微服

[PHP] 调用微博API 发微博OAuth2.0

在实际测试中出现很多问题, 第一就是按照文档调用ACCESS_TOKEN的时候费老劲啦,因为是编辑线上的,有好多中文空格,没有看出来!整了好久! 第二个就是在调用api发微博的时候出现乱码!必须把发送内容转化成URLcode的格式! 还有就是在index.php文件标红的$URL地址传输的时候问题! 下面看码吧,还有就是封装好的伪造表单提交curl.class.php的类! 文件:weibo.php 1 <!DOCTYPE html> 2 <html lang="en"

微信企业号:OAuth2.0微信授权验证

企业应用中的URL链接(包括自定义菜单或者消息中的链接),可以通过OAuth2.0验证接口来获取成员的身份信息.使用步骤和方法如下: 1.先开发要使用微信授权认证的网页应用,这个网址必须在互联网上. 2.生成回调网址 企业如果需要员工在跳转到企业网页时带上员工的身份信息,需构造如下的链接: https://open.weixin.qq.com/connect/oauth2/authorize?appid=CORPID&redirect_uri=REDIRECT_URI&response_t

再说表单验证,在Web Api中使用ModelState进行接口参数验证

写在前面 上篇文章中说到了表单验证的问题,然后尝试了一下用扩展方法实现链式编程,评论区大家讨论的非常激烈也推荐了一些很强大的验证插件.其中一位园友提到了说可以使用MVC的ModelState,因为之前通常都在Web项目中用没在Api项目用过,想想Api方法接收的多参数都封装成了一个实体类,独立于数据Model层,这样其实很方便用ModelState做验证,于是尝试了一下. 认识ModelState 我们都知道在MVC中使用ModelState实现表单验证非常简单,借助jquery.validat