使用OAuthAuthorizationServer自定义允许的授权类型

时间:2015-09-16 18:30:00

标签: c# oauth-2.0 asp.net-web-api2

我正在为web api实施OAuth 2.0。最初,我想要允许的唯一授权类型是资源所有者密码授予类型的“密码”。在未来,我可能会扩展到其他股票授予类型,甚至可以构建自定义类型。为了实现,我在我的Startup.cs类中创建了以下代码。我没有指定授权端点,只是一个令牌端点。

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    }

    public void ConfigureAuth(IAppBuilder app)
    {

        var myOAuthServerProvider = new MyOAuthServerProvider();

        app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
        {

            // mark true if you are not on https channel. This should never be true for Production.
            AllowInsecureHttp = true,

            //Enable a 60 minute expiration time.
            AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(60),

            // Allows the authorization server to alter the response coming out so it can report a 401.
            AuthenticationMode = AuthenticationMode.Active,

            // Provider needs to be the custom class that performs our authentication. 
            Provider = myOAuthServerProvider,

            // This specifies the endpoint path where you can generate a token. 
            TokenEndpointPath = new PathString("/api/token"),

        });
    }
}

对于MyOAuthServerProvider类,我应该从OAuthAuthorizationServerProvider继承并覆盖特定方法以仅允许我想要启用的授权类型,还是应该从头开始从IOAuthAuthorizationServerProvider接口实现MyOAuthServerProvider?

1 个答案:

答案 0 :(得分:3)

仅允许您希望的授权类型足以从OAuthAuthorizationServerProvider继承。然后你需要覆盖两个方法:

  • ValidateClientAuthentication - 验证请求的来源是否已注册client_id
  • GrantResourceOwnerCredentials - 在username设置为password
  • 时验证提供的grant_typepassword

有关详细信息,请参阅 GrantResourceOwnerCredentials 方法的文档:

  

当对Token端点的请求到达时,其“grant_type”为   “密码”。当用户提供名称和密码凭据时,会发生这种情况   直接进入客户端应用程序的用户界面和客户端应用程序   正在使用它们来获取“access_token”和可选的“refresh_token”。   如果Web应用程序支持资源所有者凭据授予类型   它必须根据需要验证context.Username和context.Password。   要发出访问令牌,必须使用new调用context.Validated   包含有关应该关联的资源所有者的声明的票证   使用访问令牌。申请应采取适当措施   确保端点不被恶意呼叫者滥用。默认   行为是拒绝此授权类型。