在我的Web api应用程序中,我使用一些参数从http:applicationpath / connect / token获取了访问令牌(此端点来自我认为的Identity,因为我们没有创建它也无法看到)。 但是现在我需要从特定的控制器生成令牌,但看不到如何执行此操作。 有人知道如何做到这一点吗?甚至有可能吗? 谢谢
更多信息:
我的应用程序是android应用程序(app1)和其他Web应用程序(app2)之间的集成商(这是单词吗?)。
1- app1用户会将登录名和密码发送到我的应用程序。
2-然后我的应用程序会将其发送给app2,如果一切顺利,则将返回app2令牌。
3-然后我必须将此令牌保存在我的数据库中。
4-然后验证用户是否存在于我的数据库中,如果不存在,请保存它。
5-最后为我的应用程序生成一个令牌,并将其返回给用户。
答案 0 :(得分:0)
根据您的评论:
但是,我可以代替默认端点进行更改吗? 端点执行相同操作(生成令牌)?
似乎您正在寻找Extending discovery。实际上,这很容易。
在启动配置中添加一个自定义条目:
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}");
});
请注意,我没有对其进行测试,但是我认为这应该可行。