C# ASP.Net Core - 将当前登录的用户名传递给API。

问题描述 投票:0回答:1

我想在另一个网站的API中获取当前登录到我的网站的用户。出于安全考虑,我不想通过参数来传递用户名。

在我的REST API中,我有这样的代码。

var userName = Environment.UserName;

这个API是由一个使用相同代码的WebSite调用的。

在我的本地机器上,当网站和API都在运行时,我在网站和API中获取当前登录的用户。(在windows身份验证开启和匿名关闭的情况下,在网站和API上,当我调用我的API时,我得到一个身份验证失败。401,当我调用我的API))

当我将网站部署到 AzureWebSites 时,我没有将我的用户名填充到 API 上,但它在我的网站中确实有效。

我需要做什么才能将用户名推送到 API 上?

我用来从我的 Web 站点调用 API 的代码 (C#) 看起来像这样。

    private async Task<List<ResultSet>> GetResults()
    {
        HttpClient client = new HttpClient();
        List<ResultSet> Results = null;

        var url = string.Format("{0}/api/Answer", APIUri);

        string authority = "https://login.microsoftonline.com/{0}";
        authority = String.Format(authority, tenantId);
        AuthenticationContext authContext = new AuthenticationContext(authority);
        var accessToken = authContext.AcquireTokenAsync(QuestionsURL, new ClientCredential(clientId, secret)).Result.AccessToken;
        client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken);

        HttpResponseMessage response = await client.GetAsync(url);
        if (response.IsSuccessStatusCode)
        {
              Results = await response.Content.ReadAsAsync<List<ResultSet>>();
        }
        return Results;
    }

这个... accessToken 顺利通过,而api对于其他不使用 Environment.Username.

security azure-web-sites username asp.net-core-3.1 windows-identity
1个回答
0
投票

如果你正确配置了认证中间件,你应该可以从User principal对象中获取用户名。用户对象由传递给 API 的访问令牌填充。我看到你有Azure AD作为身份提供者。你可以使用 这个 GitHub的例子来设置你的API。

© www.soinside.com 2019 - 2024. All rights reserved.