【问题标题】:.NET Core Identity - How generate token from another place than path/connect/token.NET Core Identity - 如何从路径/连接/令牌以外的其他地方生成令牌
【发布时间】:2020-04-27 12:58:32
【问题描述】:

在我的 web api 应用程序中,我从带有一些参数的 http:applicationpath/connect/token 获取访问令牌(我认为这个端点来自 Identity,因为我们没有创建它,所以也看不到它)。 但现在我需要从特定控制器生成令牌,但看不到如何执行此操作。 有人知道这是怎么做到的吗?或者即使有可能? 谢谢

更多信息:

我的应用程序是 android 应用程序 (app1) 和其他网络应用程序 (app2) 之间的集成器(这是这个词吗?)。
1- app1 用户将登录名和密码发送到我的应用程序。
2- 然后我的应用程序将发送给 app2,如果一切顺利,app2 将返回 app2 令牌。
3- 然后我必须将此令牌保存在我的数据库中。
4-然后验证用户是否存在于我的数据库中,如果不存在,则保存它。
5- 最后为我的应用程序生成一个令牌并将其返回给用户。

【问题讨论】:

标签: .net-core jwt asp.net-identity identityserver4 access-token


【解决方案1】:

根据您的评论:

但是我可以不更改默认端点,而是创建另一个 做同样事情的端点(生成令牌)?

您似乎在寻找Extending discovery。这其实很简单。

在startup的配置中添加自定义入口:

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;
    })

您可能想使用Authorize path constant

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

添加新端点:

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

请注意,我没有测试它,但我认为这应该可行。

【讨论】:

  • 这是用自定义路由覆盖默认路由?
  • @LucasGabriel 不,它不会覆盖默认端点。它添加了一个自定义端点。正如您在评论中所问的那样:但是我可以不更改默认端点,而是制作 另一个端点
  • 我需要的是将默认控制器的内容放在其他地方。这个内容是我没有的。抱歉描述混乱
  • @LucasGabriel 你能解释一下为什么吗?你想用文字完成什么,而不考虑技术解决方案。你想更换令牌生成器还是什么?
  • 我的应用程序是 android 应用程序 (app1) 和其他 Web 应用程序 (app2) 之间的集成器(这是这个词吗?)。 1- app1 用户将登录名和密码发送到我的应用程序。 2- 然后我的应用程序将发送给 app2,如果一切顺利,app2 将返回 app2 令牌。 3-然后我必须将此令牌保存在我的数据库中。 4-然后验证用户是否存在于我的数据库中,如果不存在,则保存。 5- 最后为我的应用程序生成一个令牌并将其返回给用户。
猜你喜欢
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 2020-12-04
  • 2017-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-18
相关资源
最近更新 更多