通过调用/.auth/refresh端点,使用Easy Auth刷新Azure App Service上的id_token

z9gpfhce  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(84)

我在Azure上有一个linux Web应用程序(fastAPI),目前具有以下职责

  • 提供S单个P年龄A应用程序(SPA)
  • 是后端的反向代理

对于这个API,我使用built-in authentication feature "Easy Auth"
我现在做的是以下流程:

  • 用户请求SPA ->被重定向到身份提供商->验证自己,获得注入到其浏览器中的cookie,并通过AAD应用程序中设置的回调URL重定向到Web应用程序并获得SPA代码
  • SPA然后使用注入的cookie(HTTP cookie)对受保护的API发出请求

因为SPA不使用auth令牌(承载令牌)调用API,所以我想用服务器(API)上的auth令牌交换cookie。为此,API使用请求中的cookie来调用 /.auth/me 端点(blob存储令牌存储)以获取有关用户的更多信息,从中可以提取id_tokenaccess_token
从这里,我注意到id_token可用于通过EasyAuth调用受同一Azure AD应用程序保护的另一个API。
但是,id_token有时会过期,调用/.auth/refresh只会刷新access_token

问题:
一般问题:为什么可以使用id_token访问下游API。我以为这是access_token的工作?.
编辑Turns out that

Azure AD中的OAuth 2.0隐式流旨在当请求令牌的资源与客户端应用程序相同时返回ID令牌。

实际问题:有没有一种方法可以同时刷新id_token,而无需用户重新进行身份验证?类似于调用/.auth/refresh端点?或者什么才是正确的方法?还是我做的事情完全错误,SPA应该只获得一个auth令牌,然后对API发出请求?

类似问题:

ojsjcaue

ojsjcaue1#

我创建了一个Azure AD SPA应用程序,如下所示:
x1c 0d1x的数据
示例中,我使用隐式流生成了ID token

https://login.microsoftonline.com/TenantID/oauth2/v2.0/authorize?
client_id=ClientID
&response_type=id_token
&redirect_uri=https://jwt.ms
&scope=scope
&response_mode=fragment
&state=12345
&nonce=678910

字符串



是的,你是对的@*Johannes施密特 *,当一个资源的令牌与客户端应用程序相同时,Azure AD中的OAuth 2.0隐式流旨在返回一个ID令牌。要生成访问令牌,请修改&response_type=token

  • 当调用应用程序的后端API时,此ID令牌可以用作承载令牌。
  • 在大多数情况下,ID令牌是在第一个身份验证流程中获取的,并不意味着要单独刷新。如果ID令牌过期,请重新验证用户以获取新的ID令牌。
  • 访问令牌用于授权,ID令牌用于鉴权,可以使用访问令牌代替ID令牌调用接口。
  • 为每个应用程序服务使用一个Azure广告应用程序,而不是同一个Azure广告应用程序
    参考号:

作者:Imran Arshad

相关问题