Каким будет рабочий процесс авторизации для нескольких приложений с одним и тем же веб-API аутентификации? - PullRequest
0 голосов
/ 30 января 2020

У меня есть два приложения, одно из которых написано на VB. Net с использованием Asp. Net веб-форм (приложение1). Второй находится в C# с использованием Asp. Net Core MVC (app2). Я хочу создать веб-API, который аутентифицирует пользователя, пытающегося получить доступ к любому приложению, и делит этот токен авторизации между приложениями. Если пользователь переходит от app1 к app2, токен JWT будет считаться действительным, и этот пользователь будет эффективно зарегистрирован. Если тот же самый пользователь выходит из системы в любой момент, он удаляет токен JWT и потребует повторного входа в систему.

Я создал веб-API, работающий с платформой идентификации и сущностей, которая уже создает токены JWT, если у вас есть аккаунт в личность и успешно выполняет авторизацию сам по себе. Я изо всех сил пытаюсь заставить app2 принять этот JWT и каким-то образом анализировать его, чтобы увидеть, какие роли пользователь играет в app2. Вот моя текущая страница Startup.cs с информацией о том, как я подключил JwtBearer:

 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)
        {
            var authManager = Configuration.GetSection("AuthenticationManager");
            var key = TextEncodings.Base64Url.Decode(authManager.GetSection("AudienceSecret").Value);
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                    .AddJwtBearer(options =>
                    {
                        options.RequireHttpsMetadata = false;
                        options.Authority = authManager.GetSection("Address").Value;
                        options.Audience = "my secret audience";
                        options.TokenValidationParameters = new TokenValidationParameters
                        {
                            ValidateIssuerSigningKey = true,
                            IssuerSigningKey = new SymmetricSecurityKey(key),
                            ValidateIssuer = false
                        };
                    });
            services.AddControllersWithViews();
            services.AddMvc();
        }

        // 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();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });
        }
   }

Есть ли умный способ перенаправления для входа в систему, и чтобы действия контроллера app2 имели атрибут [Authorize], просто посмотрите на JWT из API? Спасибо!

1 Ответ

0 голосов
/ 30 января 2020

Вы можете рассмотреть что-то вроде IdentityServer для этого. Он может обрабатывать сценарии такого рода ios из коробки - это довольно хорошо зарекомендовавшее себя решение Net с обширной документацией и образцом кода. https://identityserver.io/

...