我尝试复制以下示例https://github.com/Azure-Samples/active-directory-dotnet-windows-store(针对azure AD进行身份验证的Windows应用商店应用),但我正在用Azure功能替换Web App。
在Function中,检查用户是否已登录的代码如下:
ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/scope").Value.Contains("user_impersonation"))
但是这不包含所需的值,而其他调用也不会返回任何值(例如ClaimsPrincipal.Current.FindFirst(ClaimTypes.GivenName));
你知道发生了什么吗?
答案 0 :(得分:0)
它与代码是在Web App还是Azure Function中运行无关。根本原因是您获取令牌的差异参数/方式。
使用Azure AD保护Azure功能并将令牌与请求关联时,它还会解析令牌并读取令牌中的声明并构造ClaimsPrincipal
对象。
您可以在this site中解析令牌,以检查您在令牌中所期望的声明。
答案 1 :(得分:0)
请参阅此问题https://github.com/Azure-Samples/active-directory-dotnet-daemon/issues/1
该范围不在索赔清单中。您可以尝试以下操作来转储您获得的所有声明并查看可用的声明。
foreach (Claim claim in ClaimsPrincipal.Current.Claims)
{
log.Info("CLAIM TYPE: " + claim.Type + "; CLAIM VALUE: " + claim.Value);
}