Есть ли способ использовать функции Identity Server в asp. net core 3.1 Rest-API - PullRequest
2 голосов
/ 22 февраля 2020

Я работаю в проекте с Rest-API на сервере, используя asp. net core 3.1, angular в качестве фронта для одностраничного приложения. От каждого клиента пользователь должен будет указать свое имя пользователя и пароль для доступа к защищенным частям веб-API. Я хотел бы использовать функции Identity Server для доступа к ASP. NET Core Identity UserManager, RoleManager и SignInManager, чтобы определить, действительны ли указанные имя пользователя и пароль.

У меня никогда не было Это было сделано раньше, и я попытался найти об этом в Inte rnet, но не так много информации, которую я мог найти. Я хотел бы получить некоторую справку о том, какие пакеты nuget использовать и как мне настроить запуск.

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Существует три основных типа клиентов. Официальный документ для идентификационных клиентов Ссылка Github для кода образца официальной идентификационной информации

Определение клиента для связи между серверами

В этом сценарии нет интерактивного пользователь присутствует - служба (он же клиент) хочет связаться с API (он же видимость):

public class Clients
{
    public static IEnumerable<Client> Get()
    {
        return new List<Client>
        {
            new Client
            {
                ClientId = "service.client",
                ClientSecrets = { new Secret("secret".Sha256()) },

                AllowedGrantTypes = GrantTypes.ClientCredentials,
                AllowedScopes = { "api1", "api2.read_only" }
            }
        };
    }
}

Определение клиента на основе браузера JavaScript (например, SPA) для аутентификации пользователя и делегированного доступа и API

Этот клиент использует так называемый неявный поток для запроса идентификатора и токена доступа у JavaScript:

var jsClient = new Client
{
    ClientId = "js",
    ClientName = "JavaScript Client",
    ClientUri = "http://identityserver.io",

    AllowedGrantTypes = GrantTypes.Implicit,
    AllowAccessTokensViaBrowser = true,

    RedirectUris =           { "http://localhost:7017/index.html" },
    PostLogoutRedirectUris = { "http://localhost:7017/index.html" },
    AllowedCorsOrigins =     { "http://localhost:7017" },

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        IdentityServerConstants.StandardScopes.Email,

        "api1", "api2.read_only"
    }
};

Определение серверного веб-приложения (например, MVC) для аутентификация пользователя и делегированный доступ к API

Интерактивные серверные (или собственные настольные / мобильные) приложения используют гибридный поток. Этот поток обеспечивает вам максимальную безопасность, поскольку токены доступа передаются только через вызовы обратного канала (и дает вам доступ к refre sh токенам):

var mvcClient = new Client
{
    ClientId = "mvc",
    ClientName = "MVC Client",
    ClientUri = "http://identityserver.io",

    AllowedGrantTypes = GrantTypes.Hybrid,
    AllowOfflineAccess = true,
    ClientSecrets = { new Secret("secret".Sha256()) },

    RedirectUris =           { "http://localhost:21402/signin-oidc" },
    PostLogoutRedirectUris = { "http://localhost:21402/" },
    FrontChannelLogoutUri =  "http://localhost:21402/signout-oidc",

    AllowedScopes =
    {
        IdentityServerConstants.StandardScopes.OpenId,
        IdentityServerConstants.StandardScopes.Profile,
        IdentityServerConstants.StandardScopes.Email,

        "api1", "api2.read_only"
    },
};

Определение клиентов в настройках приложения. json

Метод расширений AddInMemoryClients также поддерживает добавление клиентов из файла конфигурации ASP. NET Core. Это позволяет вам определять клиентов stati c непосредственно из настроек приложения. json file:

"IdentityServer": {
  "IssuerUri": "urn:sso.company.com",
  "Clients": [
    {
      "Enabled": true,
      "ClientId": "local-dev",
      "ClientName": "Local Development",
      "ClientSecrets": [ { "Value": "<Insert Sha256 hash of the secret encoded as Base64 string>" } ],
      "AllowedGrantTypes": [ "implicit" ],
      "AllowedScopes": [ "openid", "profile" ],
      "RedirectUris": [ "https://localhost:5001/signin-oidc" ],
      "RequireConsent": false
    }
  ]
}

Затем передать раздел конфигурации методу AddInMemoryClients: In Startup.cs

AddInMemoryClients(configuration.GetSection("IdentityServer:Clients"))

Список подкатегорий или подробных клиентов:

1. Учетные данные клиента:

2. Владелец ресурса клиента

3. JS OID C Клиент

4. JS Клиент OAuth

5. MVC Гибридный клиент

6. MVC Скрытый клиент

2 голосов
/ 22 февраля 2020

Я не делал этого, в частности, с Angular (я использую vue), но это в основном та же концепция. Быстрый поиск в Google показал учебник Angular speci c, который, возможно, стоит просмотреть: https://fullstackmark.com/post/21/user-authentication-and-identity-with-angular-aspnet-core-and-identityserver. На стороне IS4 я бы предложил начать с шаблона Asp. Net Identity IS4 (https://identityserver4.readthedocs.io/en/latest/quickstarts/6_aspnet_identity.html)

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