我正在测试使用OpenRasta作为ASP.NET MVC的可行替代方案的可行性。 但是,我遇到了关于身份验证的绊脚石。
让我说清楚,“Open Digest Authentication”不是一个选项。
我读过Scott Littlewood为OpenRasta创建了一个基本的身份验证分支,我已经从git下载了源代码并成功构建了它。
我现在正试图让身份验证工作,所以如果有人有真正的工作模式,我将非常感激。这是我到目前为止所做的:
//Authentication.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using OpenRasta;
using OpenRasta.Configuration;
using OpenRasta.Authentication;
using OpenRasta.Authentication.Basic;
using OpenRasta.Configuration.Fluent;
using OpenRasta.DI;
namespace myOpenRastaTest.Extensions
{
public static class ExtensionsToIUses
{
public static void BasicAuthentication<TBasicAuthenticator>(this IUses uses) where TBasicAuthenticator : class, IBasicAuthenticator
{
uses.CustomDependency<IAuthenticationScheme, BasicAuthenticationScheme>(DependencyLifetime.Transient);
uses.CustomDependency<IBasicAuthenticator, TBasicAuthenticator>(DependencyLifetime.Transient);
}
}
public class CustomBasicAuthenticator : IBasicAuthenticator
{
public string Realm { get { return "stackoverflow-realm"; } }
public CustomBasicAuthenticator()
{
}
public AuthenticationResult Authenticate(BasicAuthRequestHeader header)
{
/* use the information in the header to check credentials against your service/db */
if (true)
{
return new AuthenticationResult.Success(header.Username);
}
return new AuthenticationResult.Failed();
}
}
}
现在测试它我刚在HomeHandler.cs中创建了一个CustomBasicAuthenticator实例:
//HomeHandler.cs
using System;
using myOpenRastaTest.Resources;
namespace myOpenRastaTest.Handlers
{
public class HomeHandler
{
public object Get()
{
var custAuth = new myOpenRastaTest.Extensions.CustomBasicAuthenticator();
return new HomeResource();
}
}
}
所以,我需要知道接下来我需要采取什么步骤,因此我要求一个真正的工作模型,而不仅仅是理论答案,因为我刚刚在2天前偶然发现了框架,可能并不知道所有OpenRasta框架,你可能会抛弃我的RESTful术语:)
一旦掌握了身份验证,我就可以很好地指出如何继续评估是否将现有的asp.net原型门户移植到OpenRasta。
提前致谢...
答案 0 :(得分:2)
我有一个使用新OpenRasta身份验证过程的示例应用程序,目前仅支持BASIC身份验证。
插入不同的身份验证方案应该非常简单,但我最近没有时间这样做。
请参阅此github讨论以供将来参考:https://github.com/scottlittlewood/openrasta-stable/commit/25ee8bfbf610cea17626a9e7dfede565f662d7bb#comments
有关工作示例,请在此处查看代码:https://github.com/scottlittlewood/OpenRastaAuthSample
希望这有帮助
答案 1 :(得分:1)
一旦进行了身份验证,就需要通过对其中一个资源处理程序进行授权来触发它,例如,可以通过在其上添加RequiresAuthentication属性来执行此操作。
您可以查看该属性的代码,了解如何自行实现自定义授权。