【问题标题】:DNN API Role based authorizationDNN API 基于角色的授权
【发布时间】:2013-04-30 06:29:31
【问题描述】:

我想对 DNN 角色的 API 调用应用授权。这样 DNN 本身将执行检查登录的用户是否有权访问特定的 API 调用。我有一个解决方案,但不完全是我想要的。 = > How to handle security/authentication on a DNN-based web API。此链接建议为 API 授权设置单独的模块,以便我们可以为该模块分配角色,并通过在 API 调用中使用 [SupportedModules("ModuleName")] 属性来限制授权。我检查了这个例子,但没有运气......PLZ建议我正确的方法。

【问题讨论】:

    标签: asp.net-web-api dotnetnuke role-base-authorization


    【解决方案1】:

    只要您将 DnnApiController 作为 7.x 的一部分使用,您就可以简单地将这个属性添加到任何需要基于角色授权的方法中。

    [DnnAuthorize(StaticRoles = "MyRoleNameHere")]
    

    其中“MyRoleNameHere”是用户必须拥有的角色的名称。

    【讨论】:

    • 感谢您的回答,但使用此解决方案可能无法动态更改角色。前任。如果我想更改角色或添加新角色来访问 API,那么我需要通过更新 StaticRoles 值来更改代码。
    • @Mitchel Sellers,允许访问多个角色,只需用逗号分隔?
    • 您好,很抱歉问这个问题,但是我怎样才能在其中放置多个角色名称?
    • 是的,很抱歉延迟回复。逗号分隔似乎适用于此
    【解决方案2】:

    你看过这篇文章吗? http://www.dotnetnuke.com/Resources/Blogs/EntryId/3329/Authorization-in-the-new-DNN-Services-Framework.aspx

    我发现这很有用(以及您提到的其他答案)......但我花了很长时间才理解它!这是我到目前为止所知道的: 如果您使用的是网络浏览器,DNN 可以接受您的请求并评估权限(基于您的登录名)。链接的博客条目使用列出选项卡的 API 演示了这一点——它只显示您的登录有权查看的选项卡。如果您从其他地方(例如在 PHP 脚本中)编写 HTTP 请求,您可以在请求中发送用户名/密码时看到相同的行为。

    您可以使用 DnnAuthorize 属性,但由于您提到的原因,直接使用角色名称可能会出现问题——如果它们改变了怎么办?但是,您可以编写自己的属性。基本上,它将需要(以某种方式、形状或形式)一个 TabID 和 ModuleID。这样,您可以让 DNN 检查当前用户对该模块的权限,而不是检查角色名称。

    您可以为它编写一个模块,为您的模块分配基于角色的权限,并让 DNN 检查该选项卡/模块以获取给定的登录名。编写你自己的属性可以很容易地在你的控制器中分配权限......而无需直接指定角色。

    我相信该链接指的是 DNN 6.2,因此与 7 可能存在一些差异。

    【讨论】:

    • 为了在一定程度上解决我的问题,我做了以下事情。 1. 我创建了一个模块,仅用于设置角色以访问 API 2. 然后我在 webconfig 文件的 appSetting 中添加了相同的模块 ID,以知道该模块必须用于授权。 3. 然后我编写了自己的 Authorize 属性,在其中我将登录用户角色与分配给模块的角色进行了比较。
    • 感谢大家的帮助...!你对我的回答有什么建议。
    猜你喜欢
    • 2016-12-10
    • 2022-01-01
    • 2017-12-14
    • 2017-04-12
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多