LIM*_*ATT 5 dotnetopenauth oauth-2.0 servicestack
我使用dotnetopenauth构建了OAuth2.0授权服务器,该服务器将管理身份验证,授权以及将accessToken分配给调用者.调用者将使用访问令牌访问资源服务器上的api(webservices).如果遵循资源服务器中dotnetopenauth提供的示例,则可以通过OAuthAuthorizationManager对使用WCF 构建的 API进行身份验证
如果使用ServiceStack在Resource Server中构建我的api,如何根据分配的OAuth2.0访问令牌构建验证传入api请求的身份验证过程?该功能应类似于dotnetopenid示例中的OAuthAuthorizationManager,而不是基于登录会话.
只是一些更新
我没有使用AuthenticateAttribute或RequiredRoleAttributefrom ServiceStack.ServiceInterface。
我创建了 2 个自定义来替换和RequestFilterAttribute提供的功能。AuthenticateAttributeRequiredRoleAttribute
在每个 customRequestFilterAttribute的Execute方法中,我使用 dotnetopenauth 中的方法来验证访问令牌。
//httpReq==req from Execute(IHttpRequest req, IHttpResponse res, object requestDto)
Run Code Online (Sandbox Code Playgroud)
访问令牌验证的代码如下,请参考 servicestack 和 dotnetopenauth 的相关文档以获取更多信息。ResourceServer 是 dotnetopenauth 中的类
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);
Run Code Online (Sandbox Code Playgroud)
如果ip则null未经过身份验证,如果不是null,则传入请求有效,可以使用ip来检查角色,例如ip.IsInRole(requiredRole)
我不确定这是否是进行检查的正确方法,但它对我有用。欢迎任何更好的解决方案。
| 归档时间: |
|
| 查看次数: |
1727 次 |
| 最近记录: |