适用于 Azure AD 的 Powerapp 自定义连接器受保护 ASP.Net 核心 WebAPI - 获取未经授权的 401
Powerapp Custom Connector for Azure AD protected ASP.Net Core WebAPI - getting Unauthorized 401
我正在尝试创建一个 MS Powerapp 自定义连接器来访问 ASP.NET 核心 WebAPI,该 Web API 受 Azure AD 使用 Microsoft.Identity.Web
包保护。但无论我如何尝试设置,在尝试通过连接器访问 API 时,我总是收到 401。
所以我的设置是这样的:
Azure 应用注册
我在 Azure App Registrations
中注册了两个应用程序。一份用于 API,一份用于 Powerapp 连接器。
对于 API 注册我只配置了 'Expose an API' 下的设置。我设置了一个应用程序 ID URI
api://f9****ca-****-****-****-3d30e9e*****
并添加了范围
api://f9****ca-****-****-****-3d30e9e*****/Employees.Read.All
我还使用 Powerapp 的应用程序注册 ID 添加了授权客户端应用程序(配置如下)。
Powerapp的应用注册配置如下:
为了身份验证,Web
平台添加了重定向 URI https://global.consent.azure-apim.net/redirect
。
在 'Certificates & secrets' 下,我添加了一个客户端密码。
在 'Api permissions' 下,我添加了 API api://f9****ca-****-****-****-3d30e9e*****/Employees.Read.All
范围的权限作为 Delegated
权限。
Powerapp 自定义连接器配置
我的自定义连接器的安全选项卡配置如下:
Setting
Value
Auth type
OAuth 2.0
Identity Provider
Azure Active Directory
Client id
<Client ID of App reg for Powerapp>
Client Secret
<Client secret of App reg for Powerapp>
Login URL
https://login.windows.net
Tenant ID
<AAD Tenant ID>
Resource URL
api://f9****ca-****-****-****-3d30e9e*****
<Application ID URI of App reg for API>
Scope
api://f9****ca-****-****-****-3d30e9e*****/Employees.Read.All
ASP.net 核心 (3.1) 网络应用程序
我正在使用 Microsoft.Identity.Web
nuget 包。
在我的应用程序配置中,我添加了以下内容:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "<Client ID of app reg for API>",
"TenantId": "<Tenant ID>"
}
启动 class 看起来像这样:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
我的控制器刚刚装饰了 [Authorize]
属性。
现在,当我尝试在自定义连接器上测试操作时,WebAPI 总是 returns 一个 401 Unauthorized
而我终究无法弄清楚为什么.
我明白了,请求 header 有一个 Bearer token
用于我用来创建连接的用户。
因此发出了一个令牌,但不知何故 WebApi 认为它无效。
有趣的是,该令牌中的观众是 https://apihub.azure.com
。它不应该是应用程序注册的客户端 ID 吗?无论如何,即使我将该受众添加到我的 WebAPI 中的有效受众,我仍然会得到 401
...
这里有什么我遗漏的吗?任何帮助将不胜感激。
您忘记添加身份验证中间件。
app.UseAuthentication();
app.UseAuthorization();
我正在尝试创建一个 MS Powerapp 自定义连接器来访问 ASP.NET 核心 WebAPI,该 Web API 受 Azure AD 使用 Microsoft.Identity.Web
包保护。但无论我如何尝试设置,在尝试通过连接器访问 API 时,我总是收到 401。
所以我的设置是这样的:
Azure 应用注册
我在 Azure App Registrations
中注册了两个应用程序。一份用于 API,一份用于 Powerapp 连接器。
对于 API 注册我只配置了 'Expose an API' 下的设置。我设置了一个应用程序 ID URI
api://f9****ca-****-****-****-3d30e9e*****
并添加了范围
api://f9****ca-****-****-****-3d30e9e*****/Employees.Read.All
我还使用 Powerapp 的应用程序注册 ID 添加了授权客户端应用程序(配置如下)。
Powerapp的应用注册配置如下:
为了身份验证,Web
平台添加了重定向 URI https://global.consent.azure-apim.net/redirect
。
在 'Certificates & secrets' 下,我添加了一个客户端密码。
在 'Api permissions' 下,我添加了 API api://f9****ca-****-****-****-3d30e9e*****/Employees.Read.All
范围的权限作为 Delegated
权限。
Powerapp 自定义连接器配置
我的自定义连接器的安全选项卡配置如下:
Setting | Value |
---|---|
Auth type | OAuth 2.0 |
Identity Provider | Azure Active Directory |
Client id | <Client ID of App reg for Powerapp> |
Client Secret | <Client secret of App reg for Powerapp> |
Login URL | https://login.windows.net |
Tenant ID | <AAD Tenant ID> |
Resource URL | api://f9****ca-****-****-****-3d30e9e***** <Application ID URI of App reg for API> |
Scope | api://f9****ca-****-****-****-3d30e9e*****/Employees.Read.All |
ASP.net 核心 (3.1) 网络应用程序
我正在使用 Microsoft.Identity.Web
nuget 包。
在我的应用程序配置中,我添加了以下内容:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "<Client ID of app reg for API>",
"TenantId": "<Tenant ID>"
}
启动 class 看起来像这样:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
我的控制器刚刚装饰了 [Authorize]
属性。
现在,当我尝试在自定义连接器上测试操作时,WebAPI 总是 returns 一个 401 Unauthorized
而我终究无法弄清楚为什么.
我明白了,请求 header 有一个 Bearer token
用于我用来创建连接的用户。
因此发出了一个令牌,但不知何故 WebApi 认为它无效。
有趣的是,该令牌中的观众是 https://apihub.azure.com
。它不应该是应用程序注册的客户端 ID 吗?无论如何,即使我将该受众添加到我的 WebAPI 中的有效受众,我仍然会得到 401
...
这里有什么我遗漏的吗?任何帮助将不胜感激。
您忘记添加身份验证中间件。
app.UseAuthentication();
app.UseAuthorization();