Получить данные, связанные с зарегистрированным пользователем из веб-API, используя Angular - PullRequest
2 голосов
/ 13 октября 2019

Я не могу найти безопасный способ получить только данные, связанные с аутентифицированными пользователями, используя основные веб-API ASP.net и Angular (PWA).

Я пытался1. MSAL внутри Angular и вызывает функцию API с идентификатором входа, но клиентские коды на основе Java не кажутся безопасными, или я могу ошибаться.

http.get ('https://api.abc.edu/api/students/11223@abc.edu) ->11223 является родительским логином.

Я попробовал альтернативный вариант внутри веб-API для получения идентификатора входа в систему, а затем вызвал базу данных для получения данных.

var userId = _httpContextAccessor.HttpContext.User.FindFirst ("предпочитаемое_имя_пользователя"). Значение;

По-английски:

getItems(parentID: string): Observable<ParentStudent[]> {
    return this.http.get(this.apiEndpointParentStudents + "/" + parentID)  //parentID is a logged user name from Azure called from Angular.
      .map((response: Response) =>
        response
      )
      .catch(response => (Observable.throw(response)
      ))
  }

в режиме webapi:

startup.cs
 public void ConfigureServices(IServiceCollection services)
        {
            // Inject default DB connection string.
            services.AddDbContext<SchoolContext>(options =>
                options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

            services.AddAuthentication(sharedOptions =>
            {
                sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddAzureAdBearer(options => Configuration.Bind("AzureAd", options));

            services.AddProtectWebApiWithMicrosoftIdentityPlatformV2(Configuration);
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest);
            services.AddCors();

            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>(); // find a login user.            
            //services.AddHttpContextAccessor();
            services.AddTransient<IUserResolverService, UserResolverService>();

            services.AddMvc();
        }

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
         ---- 
         app.UseAuthentication();
        ------
}
StudentsController.cs
 [HttpGet]        
        public async Task<ActionResult<IEnumerable<Student>>> GetStudents()
        {

 var userId = _httpContextAccessor.HttpContext.User.FindFirst("preferred_username").Value;
                return await _context.Students.Where(t => t.ParentLoginUsername == userId || t.ParentLoginUsername == userId).ToListAsync();
        }

Оба работали нормально, но для обеспечения безопасности, среди моих приведенных выше решений, следуетРешение, основанное на webapi, должно рассматриваться в первую очередь над любыми клиентскими решениями, такими как AngularМогут ли хакеры, другие родители или клиенты других банков (если мой PWA является банковским приложением) вызывать api с идентификатором пользователя других людей в Angular или почтальоне, когда они получают идентификатор авторизации и токен аутентификации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...