前面的OAuth2认证,里面的授权服务器都是用的identityserver4搭建的

ids4没有之前一般都是Owin搭建授权服务器,博客园有很多

ids4出来后,一般都是用ids4来做认证和授权了,

所以这里简单说下AuthorizationCode认证,但授权服务器依然是ids4

下篇接受ids4的认证和授权

ConfigureServices配置:

#region OAuth认证
services.AddAuthentication(options =>
{
//options.DefaultAuthenticateScheme=OAuthDefaults.DisplayName
//options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultAuthenticateScheme = "Cookies";
options.DefaultSignInScheme = "Cookies";
//options.DefaultSignOutScheme = "Cookies";
options.DefaultChallengeScheme = "OAuth";
})
.AddCookie()
.AddOAuth("OAuth", options =>
{
options.ClientId = "OAuth.Client";
options.ClientSecret = "secret";
options.AuthorizationEndpoint = "http://localhost:5003/connect/authorize";
options.TokenEndpoint = "http://localhost:5003/connect/token";
options.CallbackPath = new PathString("/OAuth");
options.SaveTokens = true;
options.Scope.Add("OAuth1");
options.Scope.Add("OAuth2");
options.Scope.Add("OAuth3");
//options.Scope.Add("offline_access");
options.Events = new OAuthEvents()
{
//OnRedirectToAuthorizationEndpoint = t =>
//{
// t.Response.Redirect("http://localhost:5001/Account/userinfo");
// return Task.FromResult(0);
//}, //远程异常触发
OnRemoteFailure = OAuthFailureHandler =>
{
//var msg = OAuthFailureHandler.Failure.Message;
var authProperties = options.StateDataFormat.Unprotect(OAuthFailureHandler.Request.Query["state"]);
var redirectUrl = authProperties.RedirectUri;
if (redirectUrl.Contains("/"))
{
redirectUrl = string.Format($"{redirectUrl.Substring(0, redirectUrl.LastIndexOf("/") + 1)}#"); // redirectUrl.Substring(0, redirectUrl.IndexOf("/") + 1);
}
//"http://localhost:5001/#"
OAuthFailureHandler.Response.Redirect(redirectUrl);
OAuthFailureHandler.HandleResponse();
return Task.FromResult();
}
}; });
#endregion

中间件:
 app.UseAuthentication();

授权服务器的ApiResource配置

var oauth = new ApiResource
{
Name = "OAuth.ApiName", //这是资源名称
Description = "",
DisplayName = "",
Scopes = {
new Scope{
Name="OAuth1", //这里是指定客户端能使用的范围名称 , 是唯一的
Description="描述",
DisplayName="获得你的个人信息,好友关系",
Emphasize=true,
Required=true,
//ShowInDiscoveryDocument=true,
},
new Scope{
Name="OAuth2",
Description="描述",
DisplayName="分享内容到你的博客",
Emphasize=true,
Required=true,
},
new Scope{
Name="OAuth3",
Description="描述",
DisplayName="获得你的评论",
}
}
};

当选择使用微博登陆。就会跳转到授权服务器,使用微博账号登陆

当然,如果你取消,则会跳转回来,是根据OnRemoteFailure事件来的

登陆成功后,则提示是否同意授权

如果取消,则也会跳回之前的页面

同意授权后,则跳转回来,拿到了access_token ,可以请求资源服务器获取资源了

从5003跳转到了5001

就这么一个简单的过程,下篇详细接受下ids4,感觉那才是重点

OAuth2认证和授权:AuthorizationCode认证的更多相关文章

  1. keycloak~账号密码认证和授权码认证

    用户名密码登录 POST /auth/realms/demo/protocol/openid-connect/token 请求体 x-www-form-urlencoded grant_type:pa ...

  2. ASP.NET Core WebAPI中使用JWT Bearer认证和授权

    目录 为什么是 JWT Bearer 什么是 JWT JWT 的优缺点 在 WebAPI 中使用 JWT 认证 刷新 Token 使用授权 简单授权 基于固定角色的授权 基于策略的授权 自定义策略授权 ...

  3. OAuth2.0认证和授权原理

    什么是OAuth授权?   一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...

  4. [转载] OAuth2.0认证和授权原理

    转载自http://www.tuicool.com/articles/qqeuE3 什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准,允许第三方网站在用户授权的前 ...

  5. 一步步搭建最简单oauth2.0认证和授权

    oauth2.0 最早接触这个概念是在做微信订阅号开发.当时还被深深的绕进去,关于oauth2.0的解释网上有好多,而且都讲解的比较详细,下面给大家价格参考资料. http://owin.org/ h ...

  6. OAuth2.0认证和授权以及单点登录

    https://www.cnblogs.com/shizhiyi/p/7754721.html OAuth2.0认证和授权机制讲解 2017-10-30 15:33 by shizhiyi, 2273 ...

  7. OAuth2认证和授权:ResourceOwnerPassword认证

    ResourceOwnerPassword在 ClientCredentials认证上新增了用户名和密码 但通过RequestPasswordTokenAsync获取不到refresh_token,不 ...

  8. OAuth2认证和授权:ClientCredentials认证

    1:创建授权服务器项目:AuthorizationServer,添加包:IdentityServer4 2:创建资源服务器项目:ResourcesServer,添加包:IdentityServer4. ...

  9. OAuth2认证和授权入门

    OAuth2四种授权方式 四种授权方式 OAuth 2.0定义了四种授权方式. 密码模式(resource owner password credentials) 授权码模式(authorizatio ...

随机推荐

  1. Linux文件属性有哪些?(共十位)

    -rw-r--r-- 那个是权限符号,总共是 - --- --- --- 这几个位. 第一个短横处是文件类型识别符: - 表示普通文件: c 表示字符设备(character): b 表示块设备(bl ...

  2. 02Hadoop二次排序2

    案例: 数据: 邮编   |     日期     |金额 ILMN,2013-12-05,97.65GOOD,2013-12-09,1078.14IBM,2013-12-09,177.46ILMN, ...

  3. python内建时间模块 time和datetime

    时间模块 UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST(Daylight Saving Time)即夏令时. ...

  4. SQL Server 中,如何獲得上個月的第一天和最後一天( 帶時間戳)

    select DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0) --First day of previous month select DATEA ...

  5. monit官方摘录

    Here are the legal global keywords: Keyword Function ----------------------------------------------- ...

  6. vue里使用create、mounted调用方法的正确姿势

    参考:https://blog.csdn.net/Honnyee/article/details/82421844

  7. php 腾讯地图和百度地图的相互转换

    关于百度和腾讯地图坐标转换的问题,网上大多给的是JS实现的,而JS又是异步实现的,无法返回值,在有些应用场景下不好使用,这里我从腾讯论坛上找到了一个PHP转换的方法,贴出来分享给大家.经测试十分有效! ...

  8. POI操作Excel详解,读取xls和xlsx格式的文件

    package org.ian.webutil;   import java.io.File; import java.io.FileInputStream; import java.io.FileN ...

  9. WdatePicker日历添加事件,在任意月改变时处理日期事件

    原由 在做系统时根据要求有时候需要屏蔽掉某些特殊的日期,像周日或者法定假日,以及一些调班的日期:使用WdatePicker可以屏蔽掉周日和大多数法定假日,但像清明或者调班的日期则不好处理. 想法 1: ...

  10. ASP.NET MVC中使用FluentValidation验证实体(转载)

    1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...