servicestack,dotnetopenauth,Oauth 2.0,servicestack,Dotnetopenauth" /> servicestack,dotnetopenauth,Oauth 2.0,servicestack,Dotnetopenauth" />

Oauth 2.0 设置ServiceStack从OpenAuth令牌请求身份验证

Oauth 2.0 设置ServiceStack从OpenAuth令牌请求身份验证,oauth-2.0,servicestack,dotnetopenauth,Oauth 2.0,servicestack,Dotnetopenauth,(这个问题可以看作是这两篇关于ServiceStack场景中使用DotNetOpenAuth的OpenAuth的StackOverflow文章的后续内容:和) 据我所知,ServiceStack使用IAuthSession来知道哪个用户经过身份验证,但这似乎依赖于HTTP会话cookie。对于OAuth请求,不存在这样的cookie 问题:如果1)存在浏览器cookie,或2)存在OAuth身份验证标头承载,我希望我的ServiceStack请求被视为已验证。我该怎么做 我尝试了以下方法来设置线

(这个问题可以看作是这两篇关于ServiceStack场景中使用DotNetOpenAuth的OpenAuth的StackOverflow文章的后续内容:和)

据我所知,ServiceStack使用
IAuthSession
来知道哪个用户经过身份验证,但这似乎依赖于HTTP会话cookie。对于OAuth请求,不存在这样的cookie

问题:如果1)存在浏览器cookie,或2)存在OAuth身份验证标头承载,我希望我的ServiceStack请求被视为已验证。我该怎么做

我尝试了以下方法来设置线程的身份验证,但它依赖于ASP.NET的
HttpContext.Current.User

我也希望它能在IIS托管和自托管的场景中工作

var analyzer = new StandardAccessTokenAnalyzer((RSACryptoServiceProvider)signCert.PublicKey.Key, (RSACryptoServiceProvider)encryptCert.PrivateKey);
var resourceServer = new ResourceServer(analyzer);
var requestWrapper = new HttpRequestWrapper((HttpRequest)request.OriginalRequest);

var principal = resourceServer.GetPrincipal(requestWrapper, requiredScopes);
HttpContext.Current.User = principal;

非常感谢您的帮助。

您是否通过扩展开箱即用的提供程序来创建自定义的oAuthProvider?-代码写在哪里?不,我创建了一个自定义方法属性(
requireAuth2ScopeAttribute
),正如引用的SO帖子中所建议的那样:另外,据我所知(我可能错了),OAuthProvider类是实际的openauth客户机,在我的例子中使用OAuth登录用户(例如Twitter登录、Facebook等),ServiceStack是OAuth提供程序,其他一些系统是客户端。