【问题标题】:Basic auth in DNN Web API serviceDNN Web API 服务中的基本身份验证
【发布时间】:2015-12-01 19:29:48
【问题描述】:

我正在为 DNN 构建一个库类型模块,该模块将容纳一个旨在由单独的应用程序调用的 Web API 服务。它有一个继承自 DnnApiController 的控制器。我希望此服务中的请求使用基本身份验证,因为其他应用程序与 DNN 没有关联,并且其用户不会与门户进行交互。它所能做的就是传递用户名和密码(这将通过 SSL 发生)。我们正在运行配置为使用标准表单身份验证的 DNN 7.3。

是否可以仅将此服务配置为使用基本身份验证?如果是这样,我需要哪些属性/配置才能使其工作?

【问题讨论】:

    标签: asp.net asp.net-web-api dotnetnuke basic-authentication


    【解决方案1】:

    我认为您可以使用 DNNAuthorize 属性来做到这一点。首先,我会在 DNN 中添加一个角色,例如“ExternalApp”。然后创建一个具有该角色的 DNN 用户。

    使您的网络服务代码如下所示:

    public class MyAPIController : DnnApiController
    {
        [HttpGet]
        [DnnAuthorize(StaticRoles="ExternalApp")]
        public string Ping()
        {
            return "MyAPI Version 01.00.00";
        }
    }
    

    然后在您的外部应用程序中(假设它是用 C# 编写的),您可以执行以下操作:

    string scheme = "https://";
    string domainAlias = "www.website.com";
    string modulePath = "myapimodule";
    string controllerName = "myapi";
    string apimethod = "ping";
    
    Uri serviceUri = new Uri(string.Format("{0}{1}/DesktopModules/{2}/API/{3}/{4}", scheme, domainAlias, modulePath, controllerName, apimethod));
    HttpWebRequest httpReq = (HttpWebRequest)HttpWebRequest.Create(serviceUri);
    httpReq.Credentials = new NetworkCredential("externalappUser", "password123");
    httpReq.Method = "GET";
    httpReq.Accept = "application/text";
    
    httpReq.BeginGetResponse(HttpWebRequestCallBack, httpReq);
    

    【讨论】:

    • 那行得通。我认为我最初的问题是我一直在尝试使用主机级帐户进行身份验证,但它们根本不同,以至于它在 DNN 核心的某个地方引起异常。使用具有给定角色的普通用户效果很好。
    猜你喜欢
    • 2013-06-11
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多