gpt4 book ai didi

asp.net-mvc - 跨应用程序进行表单例份验证的 ServiceStack 失败...为什么?

转载 作者:行者123 更新时间:2023-12-02 12:47:50 25 4
gpt4 key购买 nike

我有一个 ServiceStack 项目,在 api.mydomain.com 上运行 API。同一解决方案中的管理项目托管在 admin.mydomain.com 上。登录/注销已由管理应用程序处理,但我想确保用户在我的 api 调用上经过身份验证(有时还要检查权限)。我正在使用forms authentication across projects所以我的 api 项目可以使用 auth cookie。

这是我在 api 项目中的 web.config 身份验证标记:

<authentication mode="Forms">
<forms protection="All" loginUrl="home/denied" slidingExpiration="true" timeout="60" defaultUrl="home/denied" path="/" domain="mydomain.com" name=".myAuth"></forms>
</authentication>

基于此Authentication and authorization post ,我向服务方法添加了 [Authenticate] 属性,期望它根据 IsAuthenticated 的值通过/失败。但是,无论是否存在身份验证 cookie,它每次都会重定向到“home/denied”。 (我通过子类化 AuthenticateAttribute 并检查 OriginalRequest 来确认这一点...我使用管理应用程序登录时设置的 cookie 存在,并且 req.OriginalRequest.IsAuthenticated 为 true。)

为什么我的请求被重定向,以及如何正确利用管理应用程序中设置的现有身份验证凭据?

编辑:这是我想出的解决方案。它只需要 IPrincipal Identity 即可通过身份验证。

public class AuthenticateAspNetAttribute : RequestFilterAttribute
{
public override void Execute(IHttpRequest req, IHttpResponse res, object requestDto)
{
SessionFeature.AddSessionIdToRequestFilter(req, res, null); //Required to get req.GetSessionId()

using (var cache = req.GetCacheClient())
{
var sessionId = req.GetSessionId();
var session = sessionId != null ? cache.GetSession(sessionId) : null;
var originalRequest = (System.Web.HttpRequest) req.OriginalRequest;
var identity = originalRequest.RequestContext.HttpContext.User.Identity;
if (!identity.IsAuthenticated)
AuthProvider.HandleFailedAuth(new BasicAuthProvider(), session, req, res);

}
}
}

最佳答案

关于Authentication and autorization post你引用它的内容是:

ServiceStack's Authentication, Caching and Session providers are completely new, clean, dependency-free testable APIs that doesn't rely on and is devoid of ASP.NET's existing membership, caching or session provider models.

这意味着它是完全独立的,与 ASP.NET 现有的身份验证提供程序无关。即客户端需要显式调用 /auth 服务以通过 ServiceStack Web 服务进行身份验证。

请参阅SocialBootstrapApi示例演示项目是一个 MVC 网站示例,该网站在 MVC Controller 和 ServiceStack Web 服务之间使用并共享 ServiceStack 的身份验证提供程序。

关于asp.net-mvc - 跨应用程序进行表单例份验证的 ServiceStack 失败...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11972020/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com