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

如何编程获取Token,实现ASP.NET应用免登录访问目标页面?

问题解答

可以实现自动续期免登录,但需要遵循OAuth2.0/OpenID Connect规范,不能直接模拟密码提交(存在安全风险且易触发微软防护机制),以下是具体思路和注意事项:

核心实现逻辑:利用Refresh Token自动续期

从你提供的登录URL能看出,目标网站采用的是OpenID Connect混合流程(response_type=code id_token),且请求了offline_access权限,这意味着首次认证后可以获取到Refresh Token——这是实现自动续期的关键:

  1. 首次完成认证流程:
    正常走授权流程,完成登录后,目标网站的回调端点(https://{original-url-domain}/api/auth/azuread/login/code)会从微软获取到ID Token、Access Token和Refresh Token。
  2. 安全存储凭证:
    将Refresh Token、Token过期时间等信息加密存储(不要明文存在Cookie或前端存储中,避免泄露)。
  3. 自动检查并续期:
    每次访问目标页面时,先验证当前有效Token是否存在且未过期:
    • 若Token有效:直接使用现有会话Cookie访问;
    • 若Token过期/不存在:调用微软的Token端点,用Refresh Token换取新的ID Token和Access Token:
      POST https://login.microsoftonline.com/{hypothetically-tenant-id}/oauth2/v2.0/token
      Content-Type: application/x-www-form-urlencoded
      
      client_id={client-id}
      &grant_type=refresh_token
      &refresh_token={你的Refresh Token}
      &scope=openid offline_access
      &redirect_uri=https://{original-url-domain}/api/auth/azuread/login/code
      
  4. 更新会话Cookie:
    拿到新Token后,调用目标网站的认证逻辑更新会话Cookie,即可实现免登录访问。

关于你提到的手动Cookie

你手动设置的Cookie是目标网站自身的会话凭证,它依赖于微软颁发的Token有效性。当背后的Token过期后,目标网站会验证失效,所以直接复用Cookie只能临时生效,核心解决方案还是管理好微软颁发的Refresh Token。

重要注意事项

  • 禁止模拟密码提交:不要试图直接向微软登录页POST账号密码,微软有验证码、MFA、反爬机制,容易触发账号锁定,且这种方式不符合OAuth2规范,属于不安全的“密码凭证流”,仅适用于内部可信应用,不推荐。
  • 保护Refresh Token:Refresh Token有效期较长,一旦泄露会导致账号被盗用,必须加密存储在后端,绝对不能在前端暴露。
  • 兼容目标网站逻辑:确保你的流程和目标网站的认证回调逻辑兼容,最好复用目标网站已有的认证机制来获取和更新会话Cookie,避免出现验证不通过的情况。

内容的提问来源于stack exchange,提问作者Minh Trí Nguyễn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:56:09