FE->(token_a)中间人->(token_b)DownstreamServiceA
我的理解是,为了使Middleman
能够对DownstreamServiceA
进行API调用,它需要使用token_b
来交换token_a
。我试图在邮递员中模拟这种行为。但是我无法使用token_b
交换token_a
。我收到以下错误
AADSTS65001: The user or administrator has not consented to use the application with ID '{my-middleman-clientid}'
在Azure门户上,我已配置FE API权限以访问DownstreamServiceA
和Middleman
的公开API范围。当时也代表我的组织用户获得了管理员的同意。
获取令牌_a
POST to https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
grant_type:password
client_secret: foobar
client_id: my-fe-clientid
username: awesome
password: bar
scope: api://{MiddlemanId}/Middleman.All
交换令牌_b
POST to https://login.microsoftonline.com/{tenant_id}/oauth2/v2.0/token
grant_type: urn:ietf:params:oauth:grant-type:jwt-bearer
client_id: my-middleman-clientid
client_secret: foobar
scope: api://{DownstreamServiceAId}/ServiceA.all
assertion: {token_a}
requested_token_use: on_behalf_of
我可以知道我做错了什么吗?我的理解是,我的FE需要预先申请和授予DownStreamServiceA
范围的权限,这是我在Azure门户上进行的管理员授予所完成的。
答案 0 :(得分:1)
似乎您已授予FE对Middleman的访问权限,并且已授予FE对DownstreamServiceA的访问权限,但可能未授予Middleman对DownstreamServiceA的访问权限。
有几种方法可以执行此操作,如Granting consent for the middle-tier application中所述:
knownClientApplications
),并通过在FE上请求scope=openid api://{MiddlemanId}/.default
来触发“合并”同意。同意提示将包括FE和Middleman都需要的所有权限,并且将根据需要正确地为FE授予Middleman和Middleman授予DownstreamServiceA记录的授予。