免责声明:首先我要说的是我对MVC4 + Web Api + Web服务+ JQuery的新手.我可能会以错误的角度攻击这个.
我正在尝试在C#for .NET 4中构建Web MVC App + Web API以在Azure中部署.web api将由移动客户端(iOS,使用RestKit)使用.
Web MVC应用程序将相对简单.我们想使用Forms Authentication和SimpleMembership - 我们已经实现并且工作正常.
我们将使用JQuery(Knockout)脚本中的Web API方法来填充网页的各个部分.因此,我们希望JQuery使用由Forms Authentication验证的相同身份.
但是,我们的想法是Web Api可以由移动客户端直接调用.没有表格认证.
我们一直在研究Thinktecture身份模型(http://nuget.org/packages/Thinktecture.IdentityModel https://github.com/thinktecture/Thinktecture.IdentityModel.40).我们将BasicAuth和AcessKey处理程序添加到配置中并且它可以工作(请参阅下面的代码).
当您尝试访问webapi而未经过身份验证时,浏览器将显示基本身份验证对话框并按预期工作.
"问题"是,当您已经通过表单身份验证登录并尝试调用Web Api方法时,您仍然可以获得"基本身份验证"对话框.换句话说,Thinktecture IdentityModel似乎完全忽略了Forms身份验证.
我的问题是:
我知道在Stackoverflow中有很多类似的问题,我老实地看了很多,看过视频等等,但要么我缺少一些明显的东西,要么对于技术新手没有明确的文档.
我很感激帮助.谢谢.
public static AuthenticationConfiguration CreateConfiguration()
{
var config = new AuthenticationConfiguration
{
DefaultAuthenticationScheme = "Basic",
EnableSessionToken = true,
SetNoRedirectMarker = true
};
config.AddBasicAuthentication((userName, password) => userName == password, retainPassword: false);
config.AddAccessKey(token =>
{
if (ObfuscatingComparer.IsEqual(token, "accesskey123"))
{
return Principal.Create("Custom", …Run Code Online (Sandbox Code Playgroud)