c# - “错误:” “Unsupported_grant_type” 使用 OAuth 2.0,Owin。密码授予和授权授予
问题描述
我正在使用Framework NOT Core 构建 Web API 应用程序。我有一个用户授权,它是 Login/Logout/Register User Password Grant_Type,使用Owin和OAuth2 Password Grant_Type。
要访问 NopCommerce 受保护的资源,我必须使用 OAuth2 授权我的应用程序,授权 Grant_Type 获取令牌。[在此处输入链接描述][1]
问题是当我使用Authorization Grant调用/Token端点时。NopCommerce API 将用户重定向到回调 url 的那一刻,我看到“错误:”“Unsopported_grant_type”消息。
启动.Auth.cs
// Configure the application for OAuth based flow
PublicClientId = "self";
OAuthOptions = new OAuthAuthorizationServerOptions
{
TokenEndpointPath = new PathString("/Token"),
Provider = new ApplicationOAuthProvider(PublicClientId),
AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
ApplicationCanDisplayErrors = true,
// In production mode set AllowInsecureHttp = false
AllowInsecureHttp = true
};
以及Owin附带的标准ApplicationOauthProvider.cs。
如何使用 OAuth2 Authorization Grant_Type使用上述 /Token 端点?
解决方案
所以不久前我找到了解决我自己问题的方法。我没有时间早点发布我的答案。反正。
首先,我认为问题出在 RouteConfig.cs 中,但标准ApplicationOauthProvider.cs似乎还没有准备好授权授权,而是准备密码授权。因此,要使用多个 Grant-Types或 Flow(s),最佳实践是创建自定义 Startup Options。
在我的案例中,我添加了以下内容:
NopOAuthOptions = new OAuthAuthorizationServerOptions
{
AuthorizeEndpointPath = new PathString("/NopAuthorize"),
TokenEndpointPath = new PathString("/NopToken"),
Provider = new NopOAuthProvider(),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(10),
ApplicationCanDisplayErrors = true,
//true only in development
AllowInsecureHttp = true,
};
app.UseOAuthAuthorizationServer(NopOAuthOptions);
然后我像这样创建了我的自定义提供程序:
public override Task MatchEndpoint(OAuthMatchEndpointContext context)
{
var endpointPath = new PathString("/NopAuthorize");
if (context.Options.TokenEndpointPath == endpointPath)
{
context.MatchesAuthorizeEndpoint();
Trace.WriteLine(context.OwinContext.Request.QueryString);
}
return base.MatchEndpoint(context);
}
当然,为了安全起见,最好还配置:
public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
public override Task ValidateAuthorizeRequest(OAuthValidateAuthorizeRequestContext context)'
ETC....
Microsoft 有一个很棒的文档页面,专门用于 Owin Oauth2 授权服务器。
推荐阅读
- python - 如何使用列表列表调用 itertools.pruduct 函数
- mongodb - mongod:错误:子进程失败,以 100 退出
- html - 填满整个屏幕宽度的图像
- excel - 将单元格范围从一张纸剪切到另一张纸
- javascript - 使用 Next js 和 express 进行电子邮件验证
- c# - MailMessage 附加到字节 []
- javascript - 检查谷歌脚本上的单元格是否为空
- networking - 将请求从计算引擎 (GCP) 转发到本地 API
- c# - Blazor 服务器 - 从当前登录用户获取 AAD 访问令牌
- sql - 从文本字段中查找子字符串的出现次数