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