You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC无Azure AD权限下实现Microsoft登录及Graph调用咨询

需求可行性及实现方案

这个需求完全可行,核心思路是利用OAuth 2.0授权码流程(含PKCE),让用户主动授权你的应用访问其Microsoft账号及关联的Azure AD资源,全程无需你获取对方公司Azure AD目录的管理凭据。

具体实现步骤:

  1. 在你的Azure租户中注册应用

    • 用个人Azure账号(免费注册即可)登录Azure门户,注册一个新的应用程序。
    • 配置应用的重定向URI(比如你的网站回调地址:https://your-domain.com/auth/callback)。
    • 在API权限中添加需要的Delegated权限(比如User.Read、Mail.Read等Microsoft Graph权限),无需管理员同意(用户自己授权即可)。
    • 记录应用的client_id,如果是web应用还需生成client_secret(单页应用建议用PKCE流程,无需client_secret)。
  2. 引导用户完成授权登录

    • 构造授权请求URL,示例参数如下:
      https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
      client_id=YOUR_CLIENT_ID
      &response_type=code
      &redirect_uri=YOUR_REDIRECT_URI
      &scope=User.Read Mail.Read
      &response_mode=query
      &code_challenge=YOUR_PKCE_CHALLENGE
      &code_challenge_method=S256
      
    • 用户点击该链接后,会跳转至Microsoft登录页,输入其公司Azure AD账号完成登录,随后页面会提示用户授权你的应用访问请求的权限。
    • 用户授权后,会跳转至你配置的重定向URI,并携带授权码code。
  3. 换取访问令牌

    • 向Microsoft令牌端点发送POST请求,参数包含:
      • client_id:你的应用ID
      • code:获取到的授权码
      • redirect_uri:与授权请求一致的回调地址
      • grant_type:authorization_code
      • code_verifier:PKCE流程对应的验证值(单页应用/web应用均需)
      • client_secret:仅web应用需要,作为应用身份验证凭据
    • 接口返回access_token(用于调用Graph API)、refresh_token(用于刷新过期的令牌)。
  4. 调用Microsoft Graph API

    • 将access_token放入请求头:Authorization: Bearer {access_token}
    • 调用目标Graph接口,例如获取用户信息:GET https://graph.microsoft.com/v1.0/me

关键注意事项:

  • 仅能申请Delegated权限:这类权限是基于用户身份的,用户授权后你的应用才能以该用户的身份访问资源;Application权限需要租户管理员同意,你无法获取该权限。
  • 权限范围需精准:只申请业务必需的权限,避免请求过多权限导致用户拒绝授权。
  • 令牌刷新逻辑:access_token有效期通常为1小时,需用refresh_token定期获取新令牌,无需用户重复登录。
  • 安全防护:web应用务必使用HTTPS,单页应用强制使用PKCE流程防止授权码劫持,避免泄露client_secret或refresh_token。

内容的提问来源于stack exchange,提问作者daycg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 17:36:23