Как использовать Аутентификацию и Авторизацию моего IdentityServer с собой? - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть API с именем MyApi, и я использую другое asp. net базовое приложение с Identityserver4 для Protect MyApi. Теперь у меня нет проблем в MyApi, но я хочу сохранить NationalCode своих пользователей. , Поэтому я должен сохранить это в моей базе данных IdentityServer, но не могу получить идентификатор пользователя (с User.Identity.Name) в моем проекте IdentityServer, у меня была та же проблема в моем предыдущем вопросе

User.Identity .Name имеет значение null в моем ASP. NET Core Web API

Теперь у меня есть эта проблема в моем проекте IdentityServer4, поэтому

Могу ли я использовать токен MyApi Или я получить новый токен для отправки запроса в мой проект idenittyserver4?

Если я могу использовать токен MyAPI, как добавить конфигурацию для решения проблемы?

Если мне нужно взять новый токен для моего IdentityServer4 проект, мне нужно, чтобы пользователи могли снова войти? !!!

Редактировать

Я нашел туториал в ссылке ниже, но Моя проблема еще не решена.

http://docs.identityserver.io/en/latest/topics/add_apis.html

У меня есть семя моя IdentityDatabase с методом ниже


public async Task AddIdenityServerApiToResources(IApplicationBuilder app)
        {
            using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
            {
                serviceScope.ServiceProvider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();
                var ccontext = serviceScope.ServiceProvider.GetRequiredService<ConfigurationDbContext>();
                ccontext.Database.Migrate();
                //=============================================================
                ccontext.ApiResources.Add(new ApiResource(IdentityServerConstants.LocalApi.ScopeName) {
                    UserClaims =
                    {
                        JwtClaimTypes.Name,
                        JwtClaimTypes.Subject,
                        JwtClaimTypes.Role,
                    }
                }.ToEntity());
                //Add ApiResource To Client's Scope
                var Clients = ccontext.Clients.Include(e => e.AllowedScopes);
                foreach (var item in Clients)
                {
                    item.AllowedScopes.Add(new IdentityServer4.EntityFramework.Entities.ClientScope() { Scope = IdentityServerConstants.LocalApi.ScopeName });
                }
                var Count = await ccontext.SaveChangesAsync();
                if (Count > 0)
                {
                }
            }
        }

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Я решил проблему с помощью следующей ссылки:

http://docs.identityserver.io/en/latest/topics/add_apis.html

Но проблема была в том, что я не использовал Authorize на моем контроллере с LocalApi.PolicyName policy

[Route("localApi")]
[Authorize(LocalApi.PolicyName)]
public class LocalApiController : ControllerBase
{
    public IActionResult Get()
    {
        // omitted
    }
}

после этого проблема была решена

0 голосов
/ 22 апреля 2020

В IdentityServer4 startup.cs ConfigureServices

Вы должны обращаться с API так, как если бы оно было любым другим API, которое необходимо защитить с помощью idserver4.

значение: используйте AddAuthentication и AddJWTToken:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = "https:// idserver4 ";
            options.RequireHttpsMetadata = true;
            options.Audience = "api name";
            options.TokenValidationParameters = new TokenValidationParameters
            {
                NameClaimType = "name",
                RoleClaimType = "role"
            };
        });

в контроллере API:

используйте Authorize Attirbute и определите схему аутентификации следующим образом:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...