Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >【壹刊】Azure AD 保护的 ASP.NET Core Web API (下)

【壹刊】Azure AD 保护的 ASP.NET Core Web API (下)

作者头像
老张的哲学
发布于 2022-04-11 06:23:34
发布于 2022-04-11 06:23:34
2.1K00
代码可运行
举报
文章被收录于专栏:NetCore 从壹开始NetCore 从壹开始
运行总次数:0
代码可运行

一,引言

上一节讲到如何在我们的项目中集成Azure AD 保护我们的API资源,以及在项目中集成Swagger,并且如何把Swagger作为一个客户端进行认证和授权去访问我们的WebApi资源的?本节就接着讲如何在我们的项目中集成 Azure AD 保护我们的API资源,使用其他几种授权模式进行授权认证,好了,开始今天的表演。🎉🎉🎉🎉🎉

二,正文

1,access_token的剖析!

 上一篇结尾我们成功的拿到了 access_token,并且通过 access_token 验证获取到调用Api资源的结果。我们先从swagger中去复制access_token,如图所示:

然后去 JWT.IO 解析 token

以下是解析出的全部内容,牵扯到个人隐私的内容,以使用 ‘x’ 符号代替,还请见谅

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "aud": "f38ec09d-203e-4b2d-a1c1-faf76a608528",
  "iss": "https://sts.chinacloudapi.cn/53359126-8bcf-455d-a934-5fe72d349207/",
  "iat": 1589374088,
  "nbf": 1589374088,
  "exp": 1589377988,
  "acr": "1",
  "aio": "AUQAu/8HAAAABTQ0iHchtR+GpkOehfH2AYXoIa0tBYg0sf1atq88824rp/+ucL2LpSdCZB8SvLbZ7dpzxUh/BUThEiz5r05COg==",
  "amr": [
    "pwd"
  ],
  "appid": "62ca9f31-585c-4d28-84b6-25fb7855aed0",
  "appidacr": "0",
  "email": "xxx@xxx.partner.onmschina.cn",
  "family_name": "xxx",
  "given_name": "xxx@xxx.partner.onmschina.cn",
  "idp": "https://sts.chinacloudapi.cn/71c1d8b2-6eec-4ae9-8671-208667b351c9/",
  "ipaddr": "113.201.51.xxx",
  "name": "xxx@xxx.partner.onmschina.cn yun",
  "oid": "0f7b8378-d133-4d76-8e5c-daf93a553b6e",
  "scp": "Order.Read",
  "sub": "-FvDwjpV6m3ZHBCC-MePlP-iSqmHi39_s5wvTCagThU",
  "tid": "53359126-8bcf-455d-a934-5fe72d349207",
  "unique_name": "xxx@xxx8.partner.onmschina.cn",
  "uti": "V1-3tIF2nEWUH7CH1FkOAA",
  "ver": "1.0"
}

从这些信息不难看到,令牌的颁发者,颁发时间,失效时间,客户端Id等等信息

着重看以下这几个参数:

  1,aud(audience):听众。这里直译起来比较拗口,其实说白了,就是这个令牌用于谁,使用令牌去访问谁,谁就是audience。

  2,iss(Issuer):颁发者。是只谁颁发的这个令牌,很显眼就我们azure认证的一个域在加上我们创建的这个租户

3,iat:令牌颁发时间

4,exp:令牌过期时间,与上面的颁发时间相差5分钟

5,appid:客户端Id,就是在Azure AD里面给Swagger注册的客户端应用的Id

6,scp:权限范围,我们为Swagger授权访问WebApi的权限

看到这里,是不是感觉和 Identity Server 4授权验证中心的好多配置特别相似。是的,这里也不要感觉到奇怪,Azure AD 也是基于OAuth 2.0和Open Id Connect协议的一种认证授权体系。只要有了 Identity Server 4的一些基础,学习Azure AD的这套认证授权也是很好入手的。

2,使用 Resource Owner Password Credentials 访问 API 资源

  Resource Owner其实就是User,密码模式相较于客户端凭证模式,多了一个参与者,就是User。通过User的用户名和密码向认证中心申请访问令牌。

  按照惯例,在postman中直接进行调用order的接口。

ResponseCode:401,提示没有权限。

1)为WebApi应用创建客户端密码

选择过期时间,点击 ”添加“

复制这个密码的值,提示以下,切换到其他页面后,就无法再进行复制了,所有提前先复制好。

2)查看资源所有者

  选择 管理=》所有者 打开资源所有者页面

图上显示已经有一个所有者账号,有人就问了,自己明明没有添加任何所有者信息,为什么就凭空冒出来一个所有者账号。其实不难看出,这个账号就是我们当前azure portal的登录账号,也是当前订阅的管理员账号,而且我们在创建MyCommany这个租户的时候也是使用的当前登录的账号,所有当前登录的账号也就自然而然的成为当前租户下应用注册的资源所有者。

3)查看WebApi的作用域

  选择 管理=》公开 API

复制 WebApi的作用域

4)查看WebApi的终结点

复制当前应用程序的 OAuth 2.0令牌终结点(v2)链接,注意圈起来的 organization 参数,这个需要换成当前应用程序所在的租户的Id。

5)测试

  1)统一验证,获取token

    tenant:应用程序计划对其进行操作的目录租户。参数必传

    client_id:分配给应用的应用程序ID,可以在注册应用的门户中找到。参数必传。

    scope:在此请求中针对 scope参数传递的值应该是所需资源的资源标识符。参数可选。

    client_secret:在应用注册门户中为应用生成的客户端机密。参数必传

    grant_type:必须设置为 password。参数必传

    username:用户的电子邮件地址

    password:用户的密码

 2)访问 api/order

砰,成功!此处应该有掌声🎉🎉🎉🎉🎉,成功的通过验证,并且获取到 api资源,但是这种模式是最不推荐的,因为client可能存了用户密码,此模式仅用于受信任的客户端。复制会发生密码泄露。所以不推荐使用。

当然,我们也会根据实际项目的情况选择不同的授权模式。👇

3,使用 Client Credentials 访问资源

客户端凭证模式,是最简单的授权模式,因为授权的流程仅发生在客户端和授权认证中心之间。适用场景为服务器与服务器之间的通信。

  1)统一验证,获取token,需要额外注意此处的租户Id,以及scope

    tenant:应用程序计划对其进行操作的目录租户。参数必传

    client_id:分配给应用的应用程序ID,可以在注册应用的门户中找到。参数必传。

    scope:在此请求中针对 scope参数传递的值应该是所需资源的资源标识符。参数必传。

    client_secret:在应用注册门户中为应用生成的客户端机密。参数必传

    grant_type:必须设置为 client_credentials。参数必传

这时候,就又有人问了,为什么这里的 scope 参数的值和上面不一样,确实,我也有这个疑问,后来找到微软官方给我的文档解释道:

Microsoft Graph 示例中,该值为 https://graph.microsoft.com/.default

此值告知 Microsoft 标识平台终结点:在为应用配置的所有直接应用程序权限中,终结点应该为与要使用的资源关联的权限颁发令牌

使用共享机密访问令牌请求:https://docs.microsoft.com/zh-cn/azure/active-directory/develop/v2-oauth2-client-creds-grant-flow

2)访问 api/order

砰,成功,再次撒花祝贺,🎉🎉🎉🎉🎉!这种模式直接是通过 client id 和 client secret 来获取 access_token,该方法通常用于服务器之间的通讯

以上就是使用 资源持有者密码授权以及 客户端凭据授权两种授权模式。到此 关于ASP.NET Core Web Api 集成 Azure AD 的授权认证暂时告一段落。

三,结尾

今天的文章大概介绍了如果在我们的项目中集成 Azure AD,以及如何使用 Resource Owner Password Credentials(资源持有者密码认证)和Client Credentials(客户端凭证)

下一篇继续介绍 Azure AD B2C 的相关内容。

github:https://github.com/allentmater/Azure.AD.WebApi.git

作者:Allen

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

作者:Allen 版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020/05/16 08:30:00,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NetCore 从壹开始 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
对比授权机制,你更想用哪种?
授权机制,当我们说到这个问题的时候,大家对它的第一印象是在哪个地方呢?是不是曾经某培训机构教授的 SSO 单点登录的,是的没错,而这种 SSO 的单点登录在当年的培训机构中,使用的就是 Session 共享,也就是用 Redis 做中间模拟 Session ,但是授权机制真的有这么简单么?接下来阿粉就来强势对比一下关于授权机制了。
Java极客技术
2022/12/02
6620
对比授权机制,你更想用哪种?
【OIDC】基本概念
注意:不是 OAuth2.0 无法完成认证,而是 OAuth2.0 本身的认证过程缺乏统一的标准。
tonglei0429
2022/10/04
1.6K0
【壹刊】Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API (上)
—————————Grant_Allen 是一位博客园新晋博主,目前开始专注于Azure方向的学习和研究,是我认识不多的、打算长时间研究Azure的群友,因此打算帮他开个专栏,同时也希望并祝愿他能一直坚持下去,学有所成。
老张的哲学
2022/04/11
1.9K0
【壹刊】Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API (上)
Asp.Net Core IdentityServer4 中的基本概念
这篇文章可能大家会觉得很空洞,没有实际的实战东西,主要是自己整理出来的IdentityServer4 的一些概念性的东西;如果你对IdentityServer4有过一定的实战经验,可以跳过不需要阅读该文章,后续我会以一个Demo 来给大家带来IdentityServer4深入的实战分享 。
Jlion
2022/04/07
1.1K0
Asp.Net Core IdentityServer4 中的基本概念
可能是第二好的 Spring OAuth 2.0 文章,艿艿端午在家写了 3 天~
在《芋道 Spring Boot 安全框架 Spring Security 入门》文章中,艿艿分享了如何使用 Spring Security 实现认证与授权的功能,获得广大女粉丝的好评。
芋道源码
2020/07/02
2.1K0
可能是第二好的 Spring OAuth 2.0 文章,艿艿端午在家写了 3 天~
OAuth2.0授权协议
通过用户授权,第三方服务访问用户存在其他服务上的资源,而不需用户将用户名密码直接传递的资源服务器的安全控制协议。
sucl
2019/09/05
6910
OAuth2.0授权协议
OAuth2.0理解和用法
现在网络的资料到处都是,很容易搜索到自己想要的答案。但答案通常只能解决自己一部分的问题。如果自己想要有一套自己的解决方案,还得重新撸一遍靠谱。
Ryan-Miao
2021/04/19
1.3K0
OAuth2.0理解和用法
OAuth 2.0 的四种方式
上一篇文章介绍了 OAuth 2.0 是一种授权机制,主要用来颁发令牌(token)。本文接着介绍颁发令牌的实务操作。 下面我假定,你已经理解了 OAuth 2.0 的含义和设计思想,否则请先阅读这个系列的上一篇文章。
辉哥
2019/05/17
6020
身份即服务背后的基石
近期所在部门基本完成了 IDaaS(身份即服务) 系统的改造,故将所涉及到的知识点总结成本文。
gopher云原生
2021/11/26
2.9K0
身份即服务背后的基石
OAuth2简易实战(一)-四种模式
1. OAuth2简易实战(一)-四种模式 1.1. 授权码授权模式(Authorization code Grant) 1.1.1. 流程图 1.1.2. 授权服务器配置 配置授权服务器中 clie
老梁
2019/09/10
1.9K0
OAuth2简易实战(一)-四种模式
oauth2.0的学习与使用
栗子一: 小新现在想要使用一个“在线打印服务”来打印一些照片,同时小新的照片都存储在了“云网盘”上,按照传统的方式小新要怎么做呢?
向着百万年薪努力的小赵
2022/12/02
8590
快速入门系列--WebAPI--01基础
ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因此两者相关类的命名空间有细微差异,在使用时需要注意。 WebAPI学习系列目录如下,欢迎您的阅读! 快速入门系列--WebAPI--01基础 快速入门系列--WebAPI--02进阶 快速入门系列--WebAPI--03框架你值得拥有 快速入门系列--WebAPI--04在老版本MVC4下的调整 WebA
用户1216676
2018/01/24
2.3K0
快速入门系列--WebAPI--01基础
使用开源 MaxKey 与 APISIX 网关保护你的 API
Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动态、实时、高性能等特点,提供了负载均衡、动态上游、灰度发布(金丝雀发布)、服务熔断、身份认证、可观测性等丰富的流量管理功能。我们可以使用 Apache APISIX 来处理传统的南北向流量,也可以处理服务间的东西向流量。同时,它也支持作为 K8s Ingress Controller 来使用。
MaxKey单点登录开源官方
2023/02/17
2.8K0
使用开源 MaxKey 与 APISIX 网关保护你的 API
使用Azure AD B2C为ASP.NET Core 设置登录/注册
 上次关于Azure AD B2C 讲到一些概念,有介绍到,Azure AD B2C 也是一种身份验证的解决方案,但是它运行客户使用其首选的社交,企业或者本地账户标识对应用程序和API进行单一登录访问。同样,Azure AD B2C 使用基于标准的身份验证协议,包括 OpenID Connect、OAuth 2.0 和 SAML。 它与大多数第三方的 idp 进行集成。今天,介绍如何使用 Azure Active Directory B2C (Azure AD B2C) 在 ASP.NET Web 应用程序中进行用户登录和注册。 应用程序可以使用 Azure AD B2C 通过开放式标准协议对社交帐户、企业帐户和 Azure Active Directory 帐户进行身份验证。
老张的哲学
2022/04/11
1.5K0
使用Azure AD B2C为ASP.NET Core 设置登录/注册
OAuth 2.0 极简教程 (The OAuth 2.0 Authorization Framework)
OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAuth2.0 不兼容OAuth 1.0 。
一个会写诗的程序员
2020/10/29
3.1K0
OAuth 2.0 极简教程 (The OAuth 2.0 Authorization Framework)
asp.net core IdentityServer4 实现 resource owner password credentials(密码凭证)
本章主要介绍密码模式(resource owner password credentials),OAuth2.0资源所有者密码授权功能允许客户端将用户名和密码发送到令牌服务,并获得该用户的访问令牌.
HueiFeng
2020/02/12
1.4K0
asp.net core IdentityServer4 实现 resource owner password credentials(密码凭证)
一口气说出 OAuth2.0 的四种授权方式
上周我的自研开源项目开始破土动工了,[《开源项目迈出第一步,10 选 1?页面模板成了第一个绊脚石
程序员小富
2020/07/07
8610
一口气说出 OAuth2.0 的四种授权方式
【壹刊】Azure AD B2C(一)初识
  上一节讲到Azure AD的一些基础概念,以及如何运用 Azure AD 包含API资源,Azure AD 是微软提供的云端的身份标识和资源访问服务,帮助员工/用户/管理员访问一些外部资源和内部资源:
老张的哲学
2022/04/11
2.3K0
【壹刊】Azure AD B2C(一)初识
OAuth 2.0 的探险之旅
OAuth 2.0 全称是 Open Authorization 2.0, 是用于授权(authorization)的行业标准协议。OAuth 2.0 专注于客户端开发人员的简单性,同时为 Web 应用程序、桌面应用程序、移动设备应用等提供了特定的授权流程。它在2012年取代了 OAuth 1.0, 并且 OAuth 2.0 协议不向后兼容 OAuth 1.0。
全球技术精选
2021/11/12
1.7K0
OAuth 2.0 的探险之旅
聊聊微服务架构中的认证鉴权那些事
应用系统绕不开基础的鉴权,微服务架构推荐使用 HTTP 的方式进行服务间通信,这里推荐一篇介绍 HTTP 认证鉴的文章。
aoho求索
2021/11/25
3.2K0
聊聊微服务架构中的认证鉴权那些事
相关推荐
对比授权机制,你更想用哪种?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验