Asp.Net Core API 中基于令牌的身份验证,使用来自 Azure AD 的令牌通过 ADAL 获取
Token Based Authentication in Asp.Net Core API with token from Azure AD gotten through ADAL
我正在使用 Asp.net 核心 1.1 和 Angular 4.[=13= 开发应用程序]
在一个解决方案中,我有 API 和 Angular 应用程序。所以我不需要单独托管它们或启用 cors。要从客户端进行调用,我只需在 angular.
的 http 方法中传递“/mycontroler”
此应用程序的要求之一是使用 登录 Azure AD,但我找不到任何可以帮助我实现此流程的清晰和最新信息。
到目前为止,我所拥有的是使用 Adal 从前端登录,我能够接收用户信息和令牌。那么,我现在如何在 api 中使用此令牌来限制对资源的访问?
我的 API 启动代码是这样的:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404 &&
!Path.HasExtension(context.Request.Path.Value) &&
!context.Request.Path.Value.StartsWith("/api/"))
{
context.Request.Path = "/index.html";
await next();
}
});
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
context.Response.StatusCode = 500; // or another Status accordingly to Exception Type
context.Response.ContentType = "application/json";
var error = context.Features.Get<IExceptionHandlerFeature>();
if (error != null)
{
var ex = error.Error;
await context.Response.WriteAsync(ex.Message, Encoding.UTF8);
}
});
});
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = $"{Configuration["Authentication:AzureAd:AADInstance"]}{Configuration["Authentication:AzureAd:TenantId"]}",
Audience = Configuration["Authentication:AzureAd:ClientId"],
TokenValidationParameters =
new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidIssuer =
$"{Configuration["Authentication:AzureAd:AADInstance"]}{Configuration["Authentication:AzureAd:TenantId"]}/v2.0"
}
});
app.UseMvcWithDefaultRoute();
app.UseDefaultFiles();
app.UseStaticFiles();
}
}
}
但我不知道在我的控制器中究竟要做什么来检查用户权限和其他信息,比如他们所在的组。
在大多数情况下,我发现令牌是在 API 本身使用身份发布的,但我的情况不同,因为令牌是由 AAD 发布的。
我在这里阅读了很多文章和帖子,但找不到任何帮助我的东西。
您可以使用 Azure AD 在云应用程序中使用基于角色的访问控制。在 RBAC 中,角色是权限的集合。可以将角色授予用户或用户(组)集合。请阅读 this article 以获取教程和代码示例。
要获取用户组,您可以使用 Azure AD 组声明。配置您的应用程序以接收组声明:
- 在您的应用程序页面中,单击 "Manifest" 打开内联清单编辑器。
通过找到 "groupMembershipClaims" 设置来编辑清单,并将其值设置为 "All"(如果您对分发列表不感兴趣,则设置为 "SecurityGroup") .
保存清单。
在应用程序中授权后,您可以找到当前登录用户的群组信息。请单击 here and here 以了解有关团体索赔的更多详细信息。
当然,您始终可以调用 microsft graph api 来获取用户组信息或应用程序角色信息。使用 Microsoft Graph api 查看 List memberOf 操作。
我正在使用 Asp.net 核心 1.1 和 Angular 4.[=13= 开发应用程序]
在一个解决方案中,我有 API 和 Angular 应用程序。所以我不需要单独托管它们或启用 cors。要从客户端进行调用,我只需在 angular.
的 http 方法中传递“/mycontroler”此应用程序的要求之一是使用 登录 Azure AD,但我找不到任何可以帮助我实现此流程的清晰和最新信息。
到目前为止,我所拥有的是使用 Adal 从前端登录,我能够接收用户信息和令牌。那么,我现在如何在 api 中使用此令牌来限制对资源的访问?
我的 API 启动代码是这样的:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.Use(async (context, next) =>
{
await next();
if (context.Response.StatusCode == 404 &&
!Path.HasExtension(context.Request.Path.Value) &&
!context.Request.Path.Value.StartsWith("/api/"))
{
context.Request.Path = "/index.html";
await next();
}
});
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
context.Response.StatusCode = 500; // or another Status accordingly to Exception Type
context.Response.ContentType = "application/json";
var error = context.Features.Get<IExceptionHandlerFeature>();
if (error != null)
{
var ex = error.Error;
await context.Response.WriteAsync(ex.Message, Encoding.UTF8);
}
});
});
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
Authority = $"{Configuration["Authentication:AzureAd:AADInstance"]}{Configuration["Authentication:AzureAd:TenantId"]}",
Audience = Configuration["Authentication:AzureAd:ClientId"],
TokenValidationParameters =
new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidIssuer =
$"{Configuration["Authentication:AzureAd:AADInstance"]}{Configuration["Authentication:AzureAd:TenantId"]}/v2.0"
}
});
app.UseMvcWithDefaultRoute();
app.UseDefaultFiles();
app.UseStaticFiles();
}
} }
但我不知道在我的控制器中究竟要做什么来检查用户权限和其他信息,比如他们所在的组。
在大多数情况下,我发现令牌是在 API 本身使用身份发布的,但我的情况不同,因为令牌是由 AAD 发布的。
我在这里阅读了很多文章和帖子,但找不到任何帮助我的东西。
您可以使用 Azure AD 在云应用程序中使用基于角色的访问控制。在 RBAC 中,角色是权限的集合。可以将角色授予用户或用户(组)集合。请阅读 this article 以获取教程和代码示例。
要获取用户组,您可以使用 Azure AD 组声明。配置您的应用程序以接收组声明:
- 在您的应用程序页面中,单击 "Manifest" 打开内联清单编辑器。
通过找到 "groupMembershipClaims" 设置来编辑清单,并将其值设置为 "All"(如果您对分发列表不感兴趣,则设置为 "SecurityGroup") .
保存清单。
在应用程序中授权后,您可以找到当前登录用户的群组信息。请单击 here and here 以了解有关团体索赔的更多详细信息。
当然,您始终可以调用 microsft graph api 来获取用户组信息或应用程序角色信息。使用 Microsoft Graph api 查看 List memberOf 操作。