我用的是BearerTokenAuthentication
。
在Azure Portal
中,我激活了Azure Active Directory
,以防止第三方访问我部署的网站。
但是当激活Active Directory
特性时,Azure将Cookie
附加到每个请求,这导致claimprincipal包含来自Active Directory cookie的数据,而不是包含在我发送的承载令牌中的数据。
这就是我如何发现主体没有从承载令牌中收集到的:
[RoutePrefix("users")]
public class UsersController : ApiController
{
[Authorize]
[Route("me/claims")]
public IHttpActionResult Me()
{
var caller = (ClaimsPrincipal)User;
return Ok(caller.Claims.Select(claim => new KeyValuePair<string, string>(claim.Type, claim.Value)));
}
}
这些是请求头:
accept:application/json
Accept-Encoding:gzip, deflate, sdch, br
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
authorization:Bearer [Token]
Connection:keep-alive
Cookie:ARRAffinity=[AzureActiveDirectoryToken]
如何确保使用的唯一身份验证机制是Bearer Token
?
尝试将以下内容添加到您的web api配置
config.SuppressDefaultHostAuthentication();
忽略cookie,
config.Filters.Add(new HostAuthenticationFilter("Bearer"));