【问题标题】:How do you get the access_token claim in a controller action?您如何在控制器操作中获得 access_token 声明?
【发布时间】:2021-09-09 03:29:46
【问题描述】:

我已将 OpenIddict 集成到一个 asp.net 核心 web api 中。据我所知,它似乎正在工作。现在,我将 OpenIddict 表加入到我的应用程序表中。我已将 UserKey 添加到 OpenIddictApplications 表中。我将 OpenIddict 令牌和应用程序管理器注入到我的控制器中。现在,在每个控制器方法中,我想获取 access_token,以便我可以使用它来获取应用程序,然后跨我的数据模型运行查询,这样我就可以构建模型对象并将其作为 json 返回给调用者。

以下是我尝试过的。请求为空,因此后续行当然没有做任何有用的事情。

 [Authorize(AuthenticationSchemes = OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme)]
 [HttpGet(Name = "GetFacilities")]
 public async Task<ActionResult<FacilityDirectory>> GetFacilities()
 {
        var request = HttpContext.GetOpenIddictServerRequest();
        var accessToken = request.AccessToken;
        var appId = await _tokenManager.GetApplicationIdAsync(accessToken);
        var application = await _applicationManager.FindByIdAsync(appId);
        var userKey = ((CustomApplication)application).User.UserKey;

        // rest ommitted for brevity
 }

我需要使用什么来获取访问令牌值?

【问题讨论】:

    标签: asp.net-core asp.net-web-api openiddict


    【解决方案1】:

    我使用 Active Directory B2C 服务进行用户登录,然后获取访问令牌来访问 API。这就是我在控制器中检索访问令牌的方式。不确定,但我想无论哪个服务正在生成访问令牌(在您的情况下为 openiddict),这都应该有效。喜欢的话试试这个。

    public MyController(IHttpContextAccessor contextAccessor, ...)
    {
        var MyContext = contextAccessor.HttpContext;
        var AuthType = MyContext.User.Identity.AuthenticationType;
        var MyAccessToken = await MyContext.GetTokenAsync(AuthType, "access_token");    
    }    
    
        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-17
      • 1970-01-01
      • 1970-01-01
      • 2019-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      相关资源
      最近更新 更多