为了账号安全,请及时绑定邮箱和手机立即绑定

守护进程应用程序和范围

守护进程应用程序和范围

C#
扬帆大鱼 2023-07-09 17:24:32
因此,我尝试看看是否可以支持 C# 守护程序应用程序可以访问受 MSAL.NET 和 OAuth2 范围保护的自定义 Web API 的场景。截至目前,我看不出有什么办法可以做到这一点。库和工具集的版本是:.NET Core 2.2 Microsoft.Identity.Client 4.1.0客户是var app = ConfidentialClientApplicationBuilder.Create("<client app id>")                 .WithClientSecret("<client_secret>")                 .WithAuthority("https://login.microsoftonline.com/<tenant_id_that_hosts_the_web_api>")                 .Build();然后获取tokenawait app.AcquireTokenForClient(new string[] { "api://<app_id_of_the_web_api>/.default" });此时,我确实获得了令牌,我可以使用该令牌调用使用 MSAL 和具有上述应用 ID 的 Azure 应用程序保护的自定义 Web API 端点。这不起作用,因为我在端点上有基于策略的授权,期望在 Azure AD 应用程序中定义特定的自定义范围。问题是,如何配置客户端和 Azure AD,以便获得作为 Web API 声明传入的特定范围?
查看完整描述

2 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

您需要注册两个应用程序,一个用于守护程序应用程序(客户端应用程序),一个用于Web api(后端应用程序)。

//img1.sycdn.imooc.com/64aa7d0b0001661103470173.jpg

单击 Web api 应用程序 -> 公开 API。

//img1.sycdn.imooc.com/64aa7d180001856506500227.jpg

单击守护程序应用程序 -> API 权限 -> 添加权限 -> 我的 API -> 选择 Web api 应用程序 -> 选择权限。

//img2.sycdn.imooc.com/64aa7d260001964913110504.jpg

然后是客户端

var app = ConfidentialClientApplicationBuilder.Create("<client app id>")
                .WithClientSecret("<client app client_secret>")
                .WithAuthority("https://login.microsoftonline.com/<tenant_id>")
                .Build();

范围:

await app.AcquireTokenForClient(new string[] { "api://<app_id_of_the_web_api>/read" });


查看完整回答
反对 回复 2023-07-09
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

被迫使用 api:///.default 来获取访问令牌。当使用“常规”范围时,再多的哄骗似乎也不起作用。我按照上面的建议配置了应用程序,但不是:

await app.AcquireTokenForClient(new string[] { "api://<app_id_of_the_web_api>/read" });

我不得不使用:

await app.AcquireTokenForClient(new string[] { "api://<app_id_of_the_web_api>/.default" });

在 API 应用程序的配置中,我必须在清单中定义一个“appRole”,用于标识我要分配给守护程序应用程序的角色,然后在 Web API 中,我更改了策略代码以检查范围或应用程序角色 - 有效。


查看完整回答
反对 回复 2023-07-09
  • 2 回答
  • 0 关注
  • 95 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信