首页 文章

验证资源服务器中的Oauth Bearer令牌

提问于
浏览
0

我正在尝试使用 oauthAuthorizationServerProvider 编写自己的oauth身份验证服务器 . 客户端向Authserver请求令牌 . 如果客户端凭据是有效的auth服务器,则提供访问令牌 . 现在,客户端将每个请求的令牌发送到资源服务器 . 我无法理解资源服务器将如何验证由auth服务器生成的令牌 . 任何人都可以使用 oauthAuthorizationServerProvider 提供任何示例代码 .

以下是我尝试过的实现:

public class AuthorizationServerProvider : OAuthAuthorizationServerProvider
{
    public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
    {
        return Task.FromResult<object>(context.Validated());
    }

    public override Task TokenEndpoint(OAuthTokenEndpointContext context)
    {
        foreach (KeyValuePair<string, string> property in context.Properties.Dictionary)
        {
            context.AdditionalResponseParameters.Add(property.Key, property.Value);
        }
        return Task.FromResult<object>(null);
    }

    public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
    {
        string path = @"e:\temp\MyTest.txt";
        File.WriteAllText(path, context.AccessToken);
        return base.TokenEndpointResponse(context);
    }
}


public void Configuration(IAppBuilder app)
    {
        ConfigureOAuth(app);
    }

    public void ConfigureOAuth(IAppBuilder app)
    {
        OAuthBearerOptions = new OAuthBearerAuthenticationOptions();

        OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() { 
            AllowInsecureHttp=true,
            TokenEndpointPath= new PathString("/Token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20),
            Provider = new AuthorizationServerProvider(),

        };
        app.UseOAuthAuthorizationServer(OAuthServerOptions);
        app.UseOAuthBearerAuthentication(OAuthBearerOptions);
    }

现在我无法使用 postman 进行测试 . 如果我的实施对于 client_credentials 授权是正确的,有人可以帮助我 .

P.S:我想调试 TokenEndpointResponse 方法以及 startup 中的类 . 我怎样才能做到这一点?

1 回答

  • 0

    令牌包含授权服务器生成的身份验证票证 . 资源服务器从令牌中提取票证并检查它是否有效 .

    此任务由 Microsoft.Owin.Security.OAuth dll完成 .

    授权服务器和资源服务器必须共享用于加密令牌内的身份验证票证的相同机器密钥,并解密令牌以获取票证 . 您可以将它包含在两个网站(服务器)的 web.config 中:

    <system.web>
        ...
        <machineKey validationKey="BDE1234FBD71982481D87D815FA0A65B9F5982D123FA96E5672B78ABCD52D58818B479B19FF6D95263E85B0209297E68ABBA7D1E0BD3EABCD5E35742DEA5F2A7" 
            decryptionKey="8E8496D7342EA25ABCDEF6177E04EA00008E359C95E60CD0789456123B9ED2B3" 
            validation="SHA1" decryption="AES" />
        ...
    </system.web>
    

    TokenEndpointResponseOAuthAuthorizationServerProvider 中执行的最后一个方法,并且只有当其他方法中的所有验证都正确时,才能在提供程序正常工作之前进行调试 .

    我将我的oauth服务器实现基于postTaiseer Joudeh,我认为你可以看到阅读他的解释并查看代码 .

    我希望这可以帮助你 .

相关问题