我正在为DNN构建一个库类型模块,它将容纳一个Web API服务,该服务应由一个单独的应用程序调用。它有一个继承自DnnApiController的控制器。我希望此服务中的请求使用基本身份验证,因为其他应用程序与DNN没有关联,并且其用户无法与门户进行交互。它所能做的就是传递用户名和密码(这将通过SSL发生)。我们正在运行DNN 7.3,它被配置为使用标准的表单身份验证。
是否可以将此服务配置为使用基本身份验证?如果是这样,我需要哪些属性/配置才能使其工作?
答案 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);