使用Forms Authentication
保护我的MVC应用程序。我有一个适用AuthorizeAttribute
的全局过滤器。
我有一个名为Development
的控制器,其操作名为Report
。我可以通过正常方式进行身份验证并转到http://localhost:8080/Development/Report来访问此内容。如果我未经过身份验证,则会将我重定向到Forms身份验证登录。
我正在尝试将此页面嵌入到iOS应用中,以便用户无需手动验证自己即可查看信息。为了混淆iOS应用程序使用不同的身份验证系统,它会保存设备ID和我的MVC应用程序也存储的唯一令牌。
我要做的是通过表单身份验证和使用基本身份验证的iOS应用程序使报告操作可用,其中用户名为device ID
,密码为token
。在使用此方法进行身份验证时,用户只能访问Report
操作,这一点非常重要。实现这一目标的最佳方法是什么,同时确保一切安全?
我在考虑使用Report
属性标记AllowAnonymous
操作,然后为此操作创建自定义身份验证。这是最好的方式吗?
答案 0 :(得分:0)
认证策略就是:策略。它们不是混合和匹配的;你选择一个最适合你的应用程序并使用它。
那就是说,我看到前进的两种方式。但是,无论哪种方式,都不允许您对所有内容使用相同的操作。最好的办法是将共享代码分解为实用程序类或类似代码。
将这两项操作放在不同的项目中。然后每个项目都可以实现自己的身份验证策略。同样,类似的代码可以被分解到实用程序类中,在这种情况下,通过两个项目可以引用的类库共享。
在同一个项目中创建单独的操作,不要在其上使用Authorize
,如果它是已授权的控制器的一部分,请使用AllowAnonymous
。这将基本上关闭此操作的标准auth并且不提供保护。但是,您现在可以手动执行自己的“授权”。您可以直接在操作中检查设备ID和令牌的值,也可以创建执行此操作的操作过滤器。您选择哪种方法取决于您需要执行此操作的频率。如果这是一次性的,您可能只想直接检查操作,因为这将更快更容易。但是,如果它是一次性的,你可能仍然想要使用动作过滤器,以便在它的使用变得更加广泛时做好准备。