Skip to the content.

Teams Graph API 的 访问令牌

今天我们来继续上篇文章,具体说一下访问令牌。

获取 Graph API 的 access token 的简要步骤如下:

  • 注册 Azure AD 应用程序:首先需要注册一个 Azure AD 应用程序,这样才能获取到 client ID 和 client secret。

  • 配置应用程序权限:在 Azure 门户中配置应用程序的权限,以便访问 Graph API 的资源。

  • 获取 access token:使用 client ID 和 client secret 发送身份验证请求,获取 access token。

注册 Azure AD 应用程序

  1. 登录 Azure 门户(https://portal.azure.com),使用你的微软账号登录。
  2. 在左侧菜单中点击“Azure Active Directory”,在“Azure Active Directory”页面中点击“应用注册”。
  3. 在“应用注册”页面中点击“新建注册”,填写应用程序的名称和其它相关信息。
  4. 在“证书与密码”页面中,点击“+新建密码”按钮,可以生成新的 client secret。

配置应用程序权限

  1. 登录 Azure 门户(https://portal.azure.com),使用你的微软账号登录。
  2. 在左侧菜单中点击“Azure Active Directory”,在“Azure Active Directory”页面中点击“应用注册”。
  3. 选择我们刚刚创建的应用程序。
  4. 在“权限”页面中,选择“Microsoft Graph”,并为应用程序配置所需的权限。
  5. 可以选择已有的权限组或者自定义权限组,根据应用程序的需求进行选择。

应用程序权限 有哪些呢?Microsoft Graph API 提供了很多种类型的权限,可以用来访问不同的资源和操作:

  • 用户权限:允许应用程序访问用户的个人数据,如邮件、日历、联系人等。
  • 组权限:允许应用程序访问组的数据,如组成员、组文件等。
  • 目录权限:允许应用程序访问组织的目录数据,如用户、组、应用程序等。
  • 应用程序权限:允许应用程序访问自己的数据,如已发送的邮件、已创建的事件等。
  • 代理权限:允许应用程序代表用户执行操作,如发送邮件、创建事件等。
  • 委派权限:允许应用程序在用户授权的情况下,执行操作,如读取邮件、创建事件等。

获取访问令牌 access token

获取访问令牌的方法有多种,常见的有:

  • 客户端凭据流:使用应用程序的客户端凭据(client ID 和 client secret)发送身份验证请求,获取访问令牌。这种方法适用于服务器端应用程序。
client_id = 'your_client_id'
client_secret = 'your_client_secret'

# Get the access token
url = 'https://login.microsoftonline.com/your_tenant_id/oauth2/v2.0/token'
data = {
    'client_id': client_id,
    'client_secret': client_secret,
    'grant_type': 'client_credentials',
    'scope': 'https://graph.microsoft.com/.default'
}
response = requests.post(url, data=data)

access_token = json.loads(response.text)['access_token']
  • 授权码流:使用应用程序的客户端凭据和用户的授权码(通过用户登录获取)发送身份验证请求,获取访问令牌。这种方法适用于服务器端应用程序和用户端应用程序。
client_id = 'your_client_id'
client_secret = 'your_client_secret'
redirect_uri = 'your_redirect_uri'

# Replace the code with the code that you received from the auth code flow
code = 'your_code'

url = 'https://login.microsoftonline.com/your_tenant_id/oauth2/v2.0/token'
data = {
    'client_id': client_id,
    'client_secret': client_secret,
    'grant_type': 'authorization_code',
    'code': code,
    'redirect_uri': redirect_uri
}
response = requests.post(url, data=data)

access_token = json.loads(response.text)['access_token']
  • 隐式流:使用用户的登录凭据(通过浏览器或移动应用程序登录)发送身份验证请求,获取访问令牌。这种方法适用于用户端应用程序。
var client_id = 'your_client_id';
var redirect_uri = 'your_redirect_uri';

var url = 'https://login.microsoftonline.com/your_tenant_id/oauth2/v2.0/authorize?' + 
    'client_id=' + client_id + 
    '&response_type=token' + 
    '&redirect_uri=' + redirect_uri + 
    '&scope=https://graph.microsoft.com/.default';

// Open the auth window
location.href = url;
  • 密码流:使用用户的登录凭据(用户名和密码)发送身份验证请求,获取访问令牌。这种方法适用于用户端应用程序。由于密码授权流是不安全的,微软已经不再支持密码授权流

我们有了访问令牌后,再去调用 graph api就十分简单了,我后面的文章会介绍如何使用 graph api 来操作 teams。

Written on May 6, 2022