我正在为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?
答案 0 :(得分:3)
仅允许您希望的授权类型足以从OAuthAuthorizationServerProvider
继承。然后你需要覆盖两个方法:
client_id
username
设置为password
grant_type
和password
有关详细信息,请参阅 GrantResourceOwnerCredentials 方法的文档:
当对Token端点的请求到达时,其“grant_type”为 “密码”。当用户提供名称和密码凭据时,会发生这种情况 直接进入客户端应用程序的用户界面和客户端应用程序 正在使用它们来获取“access_token”和可选的“refresh_token”。 如果Web应用程序支持资源所有者凭据授予类型 它必须根据需要验证context.Username和context.Password。 要发出访问令牌,必须使用new调用context.Validated 包含有关应该关联的资源所有者的声明的票证 使用访问令牌。申请应采取适当措施 确保端点不被恶意呼叫者滥用。默认 行为是拒绝此授权类型。