我的情况是我有一个此Web应用程序,该应用程序正在通过OWIN针对一个天蓝色的广告进行身份验证,并且我创建了一个Web API,该Web API由Microsoft Action通过HTTP Action调用。
现在,在流程中,我已经使用Azure AD OAuth设置了HTTP调用,它成功生成了Authorization令牌标头,并调用了Web api。
起初,我像往常一样放置[Authorize]属性,因为如果请求未通过身份验证,这会强制登录,但是在这种情况下,只要我使用它,就不会调用api并且正在请求即使具有令牌头也被拒绝。
现在我可以解决这个问题,而不是使用[Authorized]属性,也许我可以仅验证请求的令牌。但是我不确定该怎么做。我敢肯定,仅检查令牌是否在标题中就不够了,我也不认为它是安全的。我已经在Google上搜索并阅读了一些帖子,但似乎是使用JWT指向的。
欢迎提出任何想法。
非常感谢您。
答案 0 :(得分:0)
起初,我像往常一样放置[Authorize]属性,就像这样 如果请求未通过身份验证,则强制登录 情况下,每当我使用它时,API不会被调用,请求是 即使具有令牌头也被拒绝。
现在我可以解决此问题,而不要使用[Authorized] 属性,
避免身份验证/授权的解决方法
我的建议是不要寻找解决方法,因为这最终可能会损害安全性。您在此处提到的行为可能是由于:
与您的Web API中的身份验证相关的配置/代码不正确,或者如果Web API一切正常,则发送给它的令牌可能有问题。
这里是code sample from Microsoft Docs,与您的情况非常相似,它在Web API代码中对所有安全路由(例如/ TodoListService / Controllers / TodoListController)使用 [Authorize]属性 .cs)。尝试一步一步比较您的Web API配置/代码。
此示例显示了WPF桌面应用程序调用的Web API(在您的情况下,Microsoft Flow将调用该API)。
如果对于Web API而言一切正确,则发送给它的令牌可能有问题。常见错误是受众群体错误(应该是您的Web API的应用ID URI)。
在这种情况下,您可以使用https://jwt.ms或https://jwt.io之类的工具检查正在发送的令牌,以检查所有声明,然后决定。
令牌验证
令牌验证是为了确保令牌是由权利或受信任的授权机构/发行者发行的,并且仍然有效(未过期),并且适用于权利租户等。它与正常的身份验证和授权一起需要,并且不能代替[所有安全路由的[授权]属性。
您没有提到Web API是要由多个租户使用还是只是一个租户应用程序。
如果是单个租户应用程序,那么大多数验证部分都由身份验证配置本身覆盖。再次参考上面显示的示例代码(特别是/TodoListService/App_Start/Startup.Auth.cs)
如果它是多租户应用程序,那么最终需要做更多的工作。我已经在本SO Post(Azure AD Multi-tenant Applications - How to implement Token Validation?)中对此进行了详细回答。仅在适用于您的Web API的情况下才尝试使用此方法。