“错误:”“ Unsopported_grant_type”使用OAuth 2.0,Owin。密码授予和授权授予

问题描述 投票:0回答:1

所以我正在使用Framework NOT Core构建Web API应用程序。我有一个用户授权,其中包括登录/注销/注册用户Password Grant_Type,使用OwinOAuth2 Password Grant_Type

要访问受NopCommerce保护的资源,我必须使用OAuth2授权我的应用程序,授权Grant_Type获得令牌。 [在此处输入链接说明] [1]

问题是当我使用Authorization Grant调用/ Token端点时。当NopCommerce API将用户重定向到回调URL时,我会看到“ Error:”“ Unsopported_grant_type”消息。

Startup.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端点?

c# asp.net-web-api oauth-2.0 authorization owin
1个回答
0
投票

不久前,我找到了解决自己问题的方法。我没有时间提前发布答案。随便

首先,我认为问题出在RouteConfig.cs,但似乎标准ApplicationOauthProvider.cs已准备好[[NOT进行授权授予,但已进行密码授予。因此,要使用multiple Grant-Types或Flow,最好的做法是创建自定义启动选项

就我而言,我添加了以下内容:

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)'

等等...

Microsoft在Owin Oauth2授权服务器上有一个很棒的文档页面。

Microsoft Owin Oauth2 Authorization Server

© www.soinside.com 2019 - 2024. All rights reserved.