2017-08-17 57 views
1

我正在开发应用程序使用Asp.net核心1.1角4基于令牌的身份验证在Asp.Net核心API与令牌从Azure AD获得通过ADAL

只有一个解决方案,我有我的API和Angular应用程序。所以我不需要单独托管它们或启用cors。为了从客户端进行调用,我只需从角度的http方法中传递“/ mycontroler”。

这个应用程序的要求之一是使用登录与Azure AD,但我找不到任何清晰和uptodate,可以帮助我实现此流程。

我到目前为止是从前端登录使用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(); 

} 

}}

,但我不知道到底是什么在我的控制器做检查用户权限和其他信息一样他们所在的团体。

在大多数情况下,我发现是使用Identity在API本身中发出的令牌,但我的情况不同,因为令牌是由AAD发出的

我已阅读了许多文章和帖子,但找不到任何东西来帮助我。

回答

1

您可以在使用Azure AD的云应用程序中使用基于角色的访问控制。在RBAC中,角色是一组权限。角色可以授予用户或用户(组)的集合。有关教程和代码示例,请阅读this article

要获取用户的组,您可以使用Azure AD组声明。配置您的应用程序以接收组声明:

  1. 在您的应用程序页面中,单击“清单”以打开内联清单编辑器。
  2. 通过查找“groupMembershipClaims”设置并将其值设置为“All”(或者如果您对分发列表不感兴趣)来设置其值为“SecurityGroup”。

  3. 保存清单。

在app中授权后,您可以找到当前登录用户的组信息。请点击herehere以获取有关集团索赔的更多详情。

当然,您可以随时调用microsft graph api来获取用户的组信息或应用程序角色信息。使用微软图形API查看List memberOf操作。

+0

非常感谢您的回答,南禹!我真的已经想通了,并且来到这里回答我自己的问题,但是,你所支持的文章肯定会有用!还有另一个问题,我正在努力弄清楚如何在我的应用程序中使用自定义角色。我在清单文件中添加了两个角色,但我没有发现如何使用新的Azure门户将这些角色分配给我的组。当我进入我的应用程序的IAM部分时,在角色列表中看不到我的自定义角色。 – Ewertonews

+0

在azure门户中,通过点击左侧导航栏中的Active Directory导航到您的租户,单击“企业应用程序” - >选择您的应用程序 - >单击“用户和组” - >单击“添加用户”按钮以添加要分配角色的用户 - >选择一个用户并选择您在清单中定义的角色。 –