我有一个使用AzureADBearer身份验证方法保护的ASP.NET Core API。
以下是我们的示例:https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore
使用此方法使用ADAL.net生成的承载令牌来保护对API的调用。
private async Task<string> getToken()
{
AuthenticationResult result = null;
string userObjectID = (User.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier"))?.Value;
// Using ADAL.Net, get a bearer token to access the TodoListService
AuthenticationContext authContext = new AuthenticationContext(AzureAdOptions.Settings.Authority, new NaiveSessionCache(userObjectID, HttpContext.Session));
ClientCredential credential = new ClientCredential(AzureAdOptions.Settings.ClientId, AzureAdOptions.Settings.ClientSecret);
result = await authContext.AcquireTokenAsync(AzureAdOptions.Settings.TodoListResourceId, credential);
return result.AccessToken;
}
但是,当我查看API收到的声明时,没有显示为用户唯一的标识符。对于为其生成令牌的每个用户,Nameidentifier声明都是相同的。
以上代码中生成的objectid是令牌生成中唯一的唯一方面,在API令牌的解构表示的声明中似乎无关紧要。
关于如何获取各种用户唯一ID到API的任何想法?那可能是电子邮件,我可以使用的SID。
答案 0 :(得分:1)
在{|}~-]+(?:\.[a-z0-9!##$%&'*+/=?^_
上有一个声明,密钥为AccessToken
或oid
。这是一个不变的GUID,可以唯一地将用户标识为Azure对象。
请看此Object ID
解码的用户令牌示例,该示例由JSON Web Token
使用Azure AD
为Single page application
的隐式授予流生成。
注意:出于隐私原因,某些项目已提交并更改。
MSAL.js