. NET Core Identity - Как генерировать токен из другого места, чем путь / соединение / токен - PullRequest
0 голосов
/ 10 января 2020

в моем приложении web api я получаю токен доступа от http:applicationpath/connect/token с некоторыми параметрами (я думаю, что эта конечная точка принадлежит Identity, поскольку мы ее не создаем и не видим). Но теперь мне нужно сгенерировать токен из указанного c контроллера, но я не вижу, как это сделать. Кто-то знает, как это можно сделать? Или даже если это возможно? Спасибо

Дополнительная информация:

Мое приложение является интегратором (это слово?) Между приложением android (app1) и другим веб-приложением (app2) ).
1- Пользователь app1 отправит логин и пароль в мое приложение.
2- Затем мое приложение отправит приложение 2, которое, если все пойдет хорошо, вернет токен app2.
3- Затем я должен сохранить этот токен в моей базе данных.
4- Затем проверить, существует ли пользователь в моей базе данных, и если нет, сохранить его.
5- И, наконец, сгенерировать токен для моего приложения и вернуться это пользователю.

1 Ответ

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

На основании вашего комментария:

Но можно ли вместо изменения конечной точки по умолчанию создать другую конечную точку, которая делает то же самое (сгенерирует токен)?

Похоже, вы скорее ищете Расширение обнаружения . На самом деле это довольно просто.

Добавьте пользовательскую запись в конфигурацию запуска:

services.AddIdentityServer(options =>
{
    options.Discovery.CustomEntries.Add("custom_token", "~/customtoken");
});

И добавьте контроллер, который обрабатывает запрос:

using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

// In case a token is required for login, like the UserInfo endpoint:
//[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[ApiController]
public class CustomTokenController : ControllerBase
{
    [Route("customtoken")]
    public IActionResult CustomTokenEndpoint()
    {
        return Ok();
    }
}

Обновление

Вы можете «заменить» конечную точку, отключив конечную точку авторизации по умолчанию и добавив пользовательскую конечную точку, как описано выше.

Отключите конечную точку:

services
    .AddIdentityServer(options =>
    {
        options.Endpoints.EnableAuthorizeEndpoint = false;
    })

Вы можете использовать Константу пути авторизации .

public const string Authorize = ConnectPathPrefix + "/authorize";

Добавить новую конечную точку:

services.AddIdentityServer(options =>
{
    options.Discovery.CustomEntries.Add("authorization_endpoint", $"~/{Authorize}");
});

Обратите внимание, я не не проверял, но я думаю, что это должно сработать.

...