我正在使用NancyModule
扩展程序检查我的终端中的声明。
当我调试我的端点时,我可以看到经过身份验证的用户具有我正在寻找的有效声明。 (这在下面的屏幕截图中显示。)
在屏幕截图中,我正在使用Vendor Admin
的用户调试端点,并且端点要求它是Admin
或Vendor Admin
。
执行不会继续执行此检查,并返回HTTP 401 Unauthorized
。
我还试图看看我是否可以在我的引导程序中使用OnError()
挂钩,但是在此调用之后它没有出现。
为什么这个(或任何其他扩展方法,Requires Authentication
,RequiresClaims
等)不起作用的任何想法?
答案 0 :(得分:0)
从您的屏幕截图中看,Nancy试图匹配您的用户声明的方式可能存在问题(因为您似乎拥有非空用户和非空声明枚举)。
假设您使用的是标准Nancy.Security用户声明,则声明检查的Nancy代码为:
///From Nancy.Security.UserIdentityExtensions
public static bool HasAnyClaim(this IUserIdentity user, IEnumerable<string> requiredClaims)
{
return
user != null
&& user.Claims != null
&& requiredClaims.Any(claim => user.Claims.Contains(claim, StringComparer.OrdinalIgnoreCase));
}
在IUserIdentity的实现中检查您的Claims对象的数据类型,并验证它将返回true:
requiredClaims.Any(claim => user.Claims.Contains(claim, StringComparer.OrdinalIgnoreCase))