Kentor SAML2 Auth MVC授权模型使用疑问及解决记录
我最近在折腾Kentor Auth Services的授权模型时踩了好几个坑,把整个过程的问题和解决思路整理出来,希望能帮到同样困惑的人:
一、最初的MVC端点困惑
一开始我完全摸不着Kentor授权MVC模型的运作逻辑——明明在Web.config里配置了表单身份验证:
<authentication mode="Forms"> <forms loginUrl="~/AuthServices/SignIn" /> </authentication>
但翻遍项目都找不到对应的AuthServices/SignIn端点,甚至HomeController里标记了[Authorize]的Secure方法,调试时根本没触发,一度怀疑这个MVC示例是不是不完整。
后来才反应过来(作为MVC新手确实疏忽了):Kentor的DLL会自动注册控制器端点,不需要我们手动写对应的控制器代码!这是个基础知识点,当时完全没意识到第三方库能通过这种方式添加路由端点。
二、Web API客户端的适配疑问
我的项目其实是Web API客户端,之后又遇到了新问题:找不到Authorization/signin端点,不确定是不是必须用OWIN模型,也想知道MVC模型能不能和Web API结合,以及怎么让客户端识别Kentor库中的登录端点。
这里需要明确:Kentor Auth Services对Web API的支持,通常推荐用OWIN中间件来集成,但如果你不想用OWIN,也可以用HTTP模块的方式替代——这也是我后来采用的方案。
三、改用HTTP模块的解决步骤
我最终换成了HTTP模块来实现身份验证,但一开始总是返回未授权,折腾了好久才发现,必须在Web.config里添加以下关键配置,才能让User.Identity正常填充:
<system.identityModel.services> <federationConfiguration> <cookieHandler requireSsl="false" name="SomeName" /> </federationConfiguration> </system.identityModel.services>
加上这个配置后,User.Identity终于能正常获取到身份信息了,目前我还在解决一个小问题:userId已经存在于claims中,但没有自动填充到User.Identity对应的属性里,后续会继续调试。
内容的提问来源于stack exchange,提问作者pachyderm94

