IS4-在隐式流身份验证的API中访问用户令牌的更好方法?

时间:2018-09-11 01:41:57

标签: asp.net-core-2.0 identityserver4 bearer-token

现在我有两个API(假设API1和API2)。我已经将Swagger连接到API1,并且可以进行身份​​验证。

我刚刚添加了extension grant,以允许API1轻松与API2通信。那也很好。

但是,扩展授权以及随后的自定义授权调用要求访问当前用户令牌。我看到的唯一的 easy 方法是使用MVC应用程序,该应用程序将令牌保存为cookie的一部分。

使用swagger客户端(隐式流程),没有可以从中获取的cookie。所以现在我只是从请求标头中拉出它。看起来很简陋。

当前方式

public async Task<string> API1Action(HttpContext httpContext)
    {
        // THIS IS JANKY
        var token = string.Empty;

        if (httpContext.Request.Headers.TryGetValue("Authorization", out var authValue))
        {
            token = authValue[0].Replace("Bearer ", "");
        }

        // create token client
        var client = new TokenClient("https://localhost:6900/connect/token", "API1", "secret");

        // send custom grant to token endpoint, return response
        var tokenResponse = await client.RequestCustomGrantAsync("delegation", "API2", new { token });

        var getClaimsUrl = new Uri($"api/v1/controller/API2Action", UriKind.Relative);

        var message = new HttpRequestMessage(HttpMethod.Get, getClaimsUrl);
            Client.SetBearerToken(tokenResponse.AccessToken);

        var res = await Client.GetAsync(getClaimsUrl);

        return await res.Content.ReadAsStringAsync();
    }

是否有更好的方法来提取令牌,以便我可以将其传递给自定义授予请求?

0 个答案:

没有答案