首页 > Web开发 > 详细

福律体彩36选7走势图:OAuth2 .net MVC实现获取token

时间:2019-03-13 00:44:34      阅读:57      评论:0      收藏:0      [点我收藏+]

深圳风采开奖直播 www.nskjr.cn 标签:get   true   mes   www   obj   adc   isp   rec   try   

OAuth2 的原理这里不多讲,可以看:https://www.cnblogs.com/icebutterfly/p/8066548.html

直奔主题:这里要实现的功能为,统计微软的Owin程序集实现本地获取token,完成token工作。

上代码:

第一步:配置Startup.Auth.cs

    public partial class Startup
    {

        public void ConfigureAuth(IAppBuilder app)
        {
            app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
            {
                AllowInsecureHttp = true,
                TokenEndpointPath = new PathString("/oauth2/token"),//设置获取token地址
                Provider = new MyOAuthAuthorizationServerProvider(),//自定义token验证
                AccessTokenExpireTimeSpan = TimeSpan.FromSeconds(300)//定义token过期时间
            });

            //下面必须加用bearer方式
            app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
            {
            });
        }
    }

第二步:继承OAuthAuthorizationServerProvider接口,重新里面的严重方法。我只实现通过用户名密码获取token,所以只重写两个方法即可

public class MyOAuthAuthorizationServerProvider : OAuthAuthorizationServerProvider
    {
        public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
        {
            string clientId;
            string clientSecret;
            if (!context.TryGetBasicCredentials(out clientId, out clientSecret))
            {
                context.TryGetFormCredentials(out clientId, out clientSecret);
            }

            if (context.ClientId == null)
            {
                context.SetError("invalid_clientId", "client_Id is not set");
                return Task.FromResult<object>(null);
            }
            if (!string.IsNullOrEmpty(clientSecret))
            {
                context.OwinContext.Set("clientSecret", clientSecret);
            }
            var client = ClientRepository.Clients.Where(c => c.Id == clientId).FirstOrDefault();
            if (client != null)
            {
                context.Validated();
            }
            else
            {
                context.SetError("invalid_clientId", string.Format("Invalid client_id ‘{0}‘", context.ClientId));
                return Task.FromResult<object>(null);
            }
            return Task.FromResult<object>(null);
        }

        public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
        {
            //这里写验证代码
            if (context.UserName=="admin"&&context.Password=="123456")
            {
                var identity = new ClaimsIdentity(
                    new GenericIdentity(context.UserName,
                    OAuthDefaults.AuthenticationType),
                    context.Scope.Select(x => new Claim("urn:oauth:scope", x)));
                context.Validated(identity);
            }
            else
            {
                context.SetError("invalid_grant", "The user name or password is incorrect");
                return Task.FromResult<object>(null);
            }
            return Task.FromResult(0);
        }
    }

第三步:定义Client实体

    public class Client
    {
        public string Id { get; set; }
    }

    public class ClientRepository
    {
        public static List<Client> Clients = new List<Client>() {
            new Client{
                 Id = "test1"
            },
            new Client{
                 Id = "test2",
            }
        };
    }

第四步:编写测试方法

技术分享图片
    public class HomeController : Controller
    {

        [Authorize]//授权标签
        public ActionResult Test()
        {
            //获取到授权登陆用户
            var authentication = HttpContext.GetOwinContext().Authentication;
            string name= authentication.User.Identity.Name;

            return Json(new { Message="Hello world",name= name });
        }

    }
View Code

 

OK,就这么简单完成。

现在来测试:

第一步:获取token,我用的POSTMan。成功获取到token

技术分享图片

 第二步:用postman测试也行,这里贴出用ajax请求的结果

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <meta charset="utf-8" />
    <script src="Scripts/jquery-1.10.2.js"></script>
    <script>
        function ajax() {
            $.ajax({
                url: /home/test,
                type: POST,
                contentType: application/x-www-form-urlencoded,
                headers: {
                    Authorization: Bearer  + $(#token).val(),
                },
                data: {},
                success: function (data) {
                    console.log(data);
                },
            })
        }
    </script>
</head>
<body>
    <input type="text" id="token" />
    <input type="button" value="提交" onclick="ajax()" />
</body>
</html>

测试结果为:

{
    "Message": "Hello world",
    "name": "admin"
}

 

OAuth2 .net MVC实现获取token

标签:get   true   mes   www   obj   adc   isp   rec   try   

原文:https://www.cnblogs.com/zhuyapeng/p/10520523.html

(0)
(0)
   
举报
评论 一句话评论(0
0条  
登录后才能评论!
? 2014 深圳风采开奖直播 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号

  • 清华同衡规划设计院副院长、景观中心主任胡洁精彩发言 2019-03-22
  • 湖州南浔:“文体惠民”送进村 2019-03-22
  • 世界献血日:走近无名英雄“熊猫侠” 2019-03-21
  • iPad也陷降速门?苹果已引发17起集体诉讼 2019-03-20
  • 它从未改变 人民网试驾广汽本田第十代雅阁 2019-03-20
  • 世界杯夜不眠 合肥万达乐园打造霸都球迷首选集结地 2019-03-19
  • 走近土掌房文章中国国家地理网 2019-03-18
  • 北京:走进高考阅卷现场 2019-03-17
  • 火车南站能多设置几个停车和上下车提示牌吗? 2019-03-17
  • 浙江消防志愿者小区“巡防” 携手居民共建“安全网” 2019-03-16
  • 对话川美前院长罗中立:揭秘《父亲》创作历程 2019-03-15
  • “长城新媒体”官方微信、微博 2019-03-14
  • 不怕玩阴的就怕来真的,小金的真威震四方,他那核弹是真敢甩啊,老特都惧 2019-03-14
  • 人民体育《大咖说》:破风骑行董事长董超谈自行车运动现状 2019-03-13
  • 百度地图春运出行大数据:年轻人返乡晚离家早 上班到最后一天 2019-03-13
  • 570| 949| 158| 822| 896| 665| 915| 894| 322| 839|