DNN Web API服务中的基本身份验证

时间:2015-12-01 19:29:49

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

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

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

1 个答案:

答案 0 :(得分:2)

我认为您可以使用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);