在入门一、入门二我们实现了一个完整的API保护的过程。需要保护的API只需在其Controler上应用[Authorize]特性,来显式指定受保护的资源。而我们实现的这个例子,所应用的模式叫“Client Credentials”,在Config.cs中有这么一段代码

“Client Credentials”(客户端凭证)模式,是最简单的授权模式,因为授权的流程仅发生在Client与Identity Server之间。

该模式的适用场景为服务器与服务器之间的通信。比如对于一个电子商务网站,将订单和物流系统分拆为两个服务分别部署。物流系统需要获取需要派送的物品,而订单系统需要跟踪物流信息。而这两个系统之间服务的授权就可以通过这种模式来实现。

官方客户授权几种说明:https://identityserver4.readthedocs.io/en/latest/topics/clients.html

OAuth2.0 定义了四种授权模式:

  1. Implicit:简化模式;直接通过浏览器的链接跳转申请令牌。
  2. Client Credentials:客户端凭证模式;该方法通常用于服务器之间的通讯;该模式仅发生在Client与Identity Server之间。
  3. Resource Owner Password Credentials:密码模式
  4. Authorization Code:授权码模式;

Implicit

就是认证服务器提供网页进行登录。受保护的网站使用该模式,访问需要授权的网页时如果没认证的会自动跳转到认证服务器的登录界面,登录后自动回到原来访问的授权页面。

Resource Owner Password Credentials

用户需要向客户端提供自己的用户名和密码。客户端使用这些信息,向"服务商提供商"索要授权。

在这种模式中,用户必须把自己的密码给客户端,这通常用在用户对客户端高度信任的情况下,比如客户端是操作系统的一部分,或由一个著名公司出品。一般不建议使用该模式。认证服务器只有在其他授权模式无法执行的情况下,才应考虑使用这种模式。

Authorization Code

我们使用第三方使用QQ帐号进行登录的例子说明

这有一篇不错的说明,上图也来自该网页
https://www.cnblogs.com/alittlesmile/p/11531577.html

一个认证服务器,可以应用两种模式吗?

可以的。后面的例子,我们要为入门一的例子上加上Implicit模式。下面源码中的将是一个新的web的网站,使用44302端口

public static IEnumerable<Client> GetClients()
{
return new List<Client>
{
new Client
{
ClientId = "client",
// no interactive user, use the clientid/secret for authentication
AllowedGrantTypes = GrantTypes.ClientCredentials,
// secret for authentication
ClientSecrets =
{
new Secret("secret".Sha256())
},
// scopes that client has access to
AllowedScopes = { "api1" }
},
new Client
{
ClientId = "mvc",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.Hybrid,
AllowOfflineAccess = true,
ClientSecrets = { new Secret("secret".Sha256()) },
RedirectUris = { "https://localhost:44302/signin-oidc" },
PostLogoutRedirectUris = { "https://localhost:44302/" },
FrontChannelLogoutUri = "https://localhost:44302/signout-oidc",
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
"api1", "api2.read_only"
},
}
};
}

  

各个模式的Client源码,可以在这找
https://identityserver4.readthedocs.io/en/latest/topics/clients.html

IdentityServer4入门三:授权模式的更多相关文章

  1. IdentityServer4 (1) 客户端授权模式(Client Credentials)

    写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...

  2. Java设计模式从精通到入门三 策略模式

    介绍 我尽量用最少的语言解释总结: Java23种设计模式之一,属于行为型模式.一个类的行为或者算法可以在运行时更改,策略对象改变context对象执行算法. 应用实例: ​ 以周瑜赔了夫人又折兵的例 ...

  3. 认证授权:IdentityServer4 - 各种授权模式应用

    前言: 前面介绍了IdentityServer4 的简单应用,本篇将继续讲解IdentityServer4 的各种授权模式使用示例 授权模式: 环境准备 a)调整项目结构如下:   b)调整cz.Id ...

  4. IdentityServer4 (2) 密码授权(Resource Owner Password)

    写在前面 1.源码(.Net Core 2.2) git地址:https://github.com/yizhaoxian/CoreIdentityServer4Demo.git 2.相关章节 2.1. ...

  5. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(三):创建使用[ClientCredentials客户端凭证]授权模式的客户端

    配套源码:https://gitee.com/jardeng/IdentitySolution 上一篇<ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建 ...

  6. IdentityServer4(客户端授权模式)

    1.新建三个项目 IdentityServer:端口5000 IdentityAPI:端口5001 IdentityClient: 2.在IdentityServer项目中添加IdentityServ ...

  7. Asp.Net Core 中IdentityServer4 授权中心之自定义授权模式

    一.前言 上一篇我分享了一篇关于 Asp.Net Core 中IdentityServer4 授权中心之应用实战 的文章,其中有不少博友给我提了问题,其中有一个博友问我的一个场景,我给他解答的还不够完 ...

  8. (十)React Ant Design Pro + .Net5 WebApi:后端环境搭建-IdentityServer4(二)授权模式

    一.前言 先交代一下整个Demo项目结构: 一个认证服务(端口5000)IdentityServer4.Authentication 五个授权模式(两个控制台程序,三个MVC项目端口5001)文件夹G ...

  9. IdentityServer4 实现自定义 GrantType 授权模式

    OAuth 2.0 默认四种授权模式(GrantType): 授权码模式(authorization_code) 简化模式(implicit) 密码模式(password) 客户端模式(client_ ...

随机推荐

  1. 分享一个仿网易新闻客户端iPhone版的标签式导航ViewController

    该Controller是一个容器,用于容纳其他的controller.效果与网易新闻客户端的标签式导航基本一样: (1)点击上面的标签,可以切换到对应的controller,标签下面的红色提示条的长度 ...

  2. 制作win10系统及安装win10系统

    制作win10系统 1.登陆msdn,下载win10系统,打开迅雷下载器,复制完该段代码,直接开始下载,网址:https://msdn.itellyou.cn/ 2.下载软碟通,下载网址:https: ...

  3. Linux如何监控每个进程所消耗流量

    查看整个系统的网卡流量使用情况 可以参考下这篇总结比较全面的文章 监控具体的某个进程所消耗的流程 首先,Linux没有自带这样的工具,通过这款第三方开源工具,也是比较好用,如果有其他的办法欢迎留言 # ...

  4. Android笔记(三) 使得Activity之间可以跳转---Intent

    什么是Intent 一个APP肯定不单单由一个Activity构成,我们在使用过程中,经常需要在多个Activity中跳转,Android中Intent可以帮我们来完成在各个Activity中跳转的功 ...

  5. java递归、js递归,无限极分类菜单表

    java-json import com.alibaba.fastjson.JSONObject; import java.util.ArrayList; import java.util.List; ...

  6. 基于CentOS构建企业镜像站

    参考:How to Setup Local HTTP Yum Repository on CentOS 7 实验环境 CentOS7 1804 步骤一:安装Nginx Web Server 最小化安装 ...

  7. Ubuntu armhf 版本国内源

    Ubuntu armhf 版本国内源: deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse restricted u ...

  8. MaxTenuringThreshold与阈值的动态调整理论详解

    今天会学习“MaxTenuringThreshold”这样一个新的JVM参数,编写的示例还是会基于上一次的代码,新建个类,如下: 接下来给它设置JVM的参数,具体如下: 而接下来会新增三个参数: 这个 ...

  9. springcloud服务提供producer and 服务调用consumer

    ---------------------------------producer------------------------------------------- 1.pom文件中,作为客户端的 ...

  10. P2P技术之STUN、TURN、ICE详解

    现在大多数计算机主机都位于防火墙或NAT之后,很少有计算机直接接入Internet.通常,人们希望网络中两天计算机能直接进行通信(P2P通信),而不是需要其他公共服务器的中转. 由于主机位于防火墙或N ...