我使用dotnetopenauth构建了OAuth2.0授权服务器,该服务器将管理身份验证,授权以及将accessToken分配给调用方。调用者将使用访问令牌访问资源服务器上的api(webservices)。 如果遵循资源服务器中dotnetopenauth提供的示例,则可以通过OAuthAuthorizationManager
对使用WCF构建的API进行身份验证如果使用ServiceStack在Resource Server中构建我的api,如何根据分配的OAuth2.0访问令牌构建验证传入api请求的身份验证过程?该功能应类似于dotnetopenid示例中的OAuthAuthorizationManager,而不是基于登录会话。
答案 0 :(得分:4)
只是一些更新
我没有使用AuthenticateAttribute
中的RequiredRoleAttribute
或ServiceStack.ServiceInterface
。
我创建了2个自定义RequestFilterAttribute
来替换AuthenticateAttribute
和RequiredRoleAttribute
提供的功能。
在每个自定义RequestFilterAttribute
的{{1}}方法中,我使用dotnetopenauth中的方法来验证访问令牌。
Execute
访问令牌验证的代码如下,请参阅servicestack和dotnetopenauth的相关文档以获取更多信息。 ResourceServer是dotnetopenauth的类
//httpReq==req from Execute(IHttpRequest req, IHttpResponse res, object requestDto)
如果HttpRequestBase reqBase = new HttpRequestWrapper((System.Web.HttpRequest)httpReq.OriginalRequest);
var resourceServer = new ResourceServer(new StandardAccessTokenAnalyzer(AuthorizationServerPublicKey, ResourceServerPrivateKey));
IPrincipal ip = null;
resourceServer.VerifyAccess(reqBase, out ip);
为ip
,则未经过身份验证,如果不是null
,则传入请求有效,可以使用null
检查角色,例如ip
我不确定这是否是正确的检查方式,但它对我有用。欢迎任何更好的解决方案。