4、认证的相关内容——应用程序的权限认证

大家好,上次我们说了Graph API获取认证的两个方式之一的委托(用户名密码登录)的认证方式,本次让我们来说说应用程序权限的认证方法。

应用程序授权并不需要用户身份进行登录验证,但它需要管理员对其进行授权。在大多数情况下,你仅需点击Azure AD注册应用中的按钮进行授权:

但有时候,UI上的授权会不生效。想确保管理员一定对此应用进行了授权,可以访问一下以下网址(以中国版Azure AD为例):

https://login.chinacloudapi.cn/<Tenant ID>/adminconsent?client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx&redirect_uri=http://localhost/

再次解释一下:

  1. 基于Azure AD 2.0,你可以把Tenant ID写为common,另外,即使些Tenant ID,也不需要加尖括号,直接些GUID即可;
  2. client_id,不多解释了,client_id就是注册应用的应用程序 ID
  3. redirect_uri,又叫做重定向URI,在身份验证中进行设置的,截图如下:

当你输入完成这样一个网址后,浏览器访问它,你会进入Azure AD的验证界面,此时需要使用管理员进行登录并授权:

当你点击接收后,浏览器会把你导航到你的重定向URI中,当然这个页面实际无所谓,重点是你已经为你注册的应用获得到了管理员授权。也是就说此时,该应用(服务主体)已经确保获得了无用户参与登录的访问权限,并拿到了一些权限。

接下来的步骤比较简单,应用程序获取登录认证不需要委托的认证那样,存在code这个中间量。而是直接去获取Access Token。

在给应用程序授予了管理员许可后,即可开始请求Access Token的过程。在应用程序的认证中申请凭证也需要POST http方法,即通过PostMan等工具或代码进行执行来实现。

具体的请求方法为(以中国版Azure AD举例):

https://login.partner.microsoftonline.cn/<Tenant ID>/oauth2/token,当然,还是可以将Tenant ID修改为common,Body中要填写的内容如下表:

名称

说明

client_id

应用程序ID

你注册应用的应用程序ID

grant_type

client_credentials

固定填写

scope

https://microsoftgraph.chinacloudapi.cn/.default

固定格式,必须填写。国际版值为https://graph.microsoft.com/.default

client_secret

证书与密码中,客户端密码的值

必须填写。你可以随时在证书与密码中重新申请。

resource

源,中国版请填写https://microsoftgraph.chinacloudapi.cn

该地址只在连接中国版时需要且必须,如连接国际版,勿添加此参数

 

如果不出意外的话,你会得到类似如下反馈:

{

    "token_type""Bearer",

    "expires_in""3599",

    "ext_expires_in""3599",

    "expires_on""1585623335",

    "not_before""1585619435",

    "resource""https://microsoftgraph.chinacloudapi.cn",

"access_token""eyJ0eXAiOiJKV1QiLCJub25jZSI6Ii……

}

你会发现,与通过用户名密码登录的情况不同,Azure AD只返回了access Token,当然这对应用程序来说也够用了,有关其他Token的情况,我还是留到下次再说吧。代码这次就不留了,和上次用户名密码通过code申请凭据的差不多,无非都是POST方法。

剩下的就是带着这个Token去调用API了,简单说明一下,你可以使用POSTMAN、Fiddler之类的工具,也可以开发完成。

POSTMAN中的测试极为简单,在Authorization 中,TYPE选为Bearer Token,将刚刚获取的Access Token粘贴在Token中,你可以去调用一个非常简单的API,如列出用户:

谢谢大家花时间阅读,下次我们讲一下之前漏掉的一些说明和情况。

发布了5 篇原创文章 · 获赞 13 · 访问量 1046

猜你喜欢

转载自blog.csdn.net/isaac618/article/details/105218116