Daemon Apps and Scopes
因此,我正在尝试查看是否可以支持C#守护程序应用程序可以访问受MSAL.NET和OAuth2范围保护的自定义Web API的方案。到目前为止,我看不到这样做的方法。
库和工具集的版本为:
.NET Core 2.2
Microsoft.Identity.Client 4.1.0
客户是
1 2 3 4 | var app = ConfidentialClientApplicationBuilder.Create("") .WithClientSecret("<client_secret>") .WithAuthority("https://login.microsoftonline.com/<tenant_id_that_hosts_the_web_api>") .Build(); |
然后获取令牌
1 |
这时,我确实获得了令牌,我将其称为使用MSAL和具有上述App ID的Azure App保护的自定义Web API端点。这不起作用,因为我在端点上具有基于策略的授权,希望在Azure AD应用程序中定义特定的自定义范围。
问题是,如何配置客户端和Azure AD,以便获得作为Web API声明传递的特定范围?
首先,感谢Caiyi提出的建议。这让我思考了正确的方法。不幸的是,我被迫使用api:///.default获取访问令牌。当使用"常规"作用域时,似乎没有任何动作在起作用。我按照上面的建议配置了应用程序,但不是:
1 |
我必须使用:
1 |
在API应用程序的配置中,我必须在清单中定义一个" appRole",以标识要分配给Daemon应用程序的角色,然后在Web API中,更改策略代码以检查作用域或应用程序角色-起作用了。
您需要注册两个应用程序,一个用于守护程序应用程序(客户端应用程序),一个用于Web api(后端应用程序)。
点击网络api应用->公开API。
单击守护程序app-> API权限->添加权限->我的API->选择Web api应用程序->选择权限。
然后是客户
1 2 3 4 | var app = ConfidentialClientApplicationBuilder.Create("<client app id>") .WithClientSecret("<client app client_secret>") .WithAuthority("https://login.microsoftonline.com/<tenant_id>") .Build(); |
范围:
1 |
请参阅此示例。您可以将您的Web API视为Microsoft Graph API。