我正在构建一个Windows service
而不是公开 WCF 或 .Net 远程处理接口,而是尝试ServiceStack
一下。(到目前为止,我正在挖掘它!)
我需要让Username
用户调用该服务。用户已经通过 Active Directory 的身份验证,因此我不希望他们看到任何其他屏幕。
该服务将由 Winforms 应用程序调用,因此我COULD
传入用户名,但可能是spoofed
.
有任何想法吗?
我正在构建一个Windows service
而不是公开 WCF 或 .Net 远程处理接口,而是尝试ServiceStack
一下。(到目前为止,我正在挖掘它!)
我需要让Username
用户调用该服务。用户已经通过 Active Directory 的身份验证,因此我不希望他们看到任何其他屏幕。
该服务将由 Winforms 应用程序调用,因此我COULD
传入用户名,但可能是spoofed
.
有任何想法吗?
好的,所以基本上这不受 ServiceStack 支持。但是您可以通过这样做来获取用户名。
namespace ServiceStackNTML
{
using ServiceStack.Common;
using ServiceStack.ServiceHost;
using ServiceStack.ServiceInterface;
using ServiceStack.WebHost.Endpoints;
using System;
using System.Net;
class Program
{
static void Main(string[] args)
{
var host = new NTMLAppHost();
host.Init();
host.Start("http://localhost:8080/");
Console.ReadLine();
}
}
class NTMLAppHost : AppHostHttpListenerBase
{
public NTMLAppHost() : base("Test", typeof(NTMLAppHost).Assembly) { }
public override void Configure(Funq.Container container)
{
}
public override void Start(string urlBase)
{
base.Start(urlBase);
this.Listener.AuthenticationSchemes = System.Net.AuthenticationSchemes.Ntlm;
}
protected override void ProcessRequest(HttpListenerContext context)
{
HostContext.Instance.Items["User"] = context.User;
base.ProcessRequest(context);
}
}
class TestService : Service
{
public string Any(UsernameRequest request)
{
return ((System.Security.Principal.IPrincipal)HostContext.Instance.Items["User"]).Identity.Name;
}
}
[Route("/Username")]
class UsernameRequest : IReturn<string>
{
}
}