首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用OAuth应用程序流的SwashBuckle.AspNetCore 4.1?

使用OAuth应用程序流的SwashBuckle.AspNetCore 4.1?
EN

Stack Overflow用户
提问于 2019-03-27 06:33:44
回答 1查看 64关注 0票数 0

我正在尝试使用带有OAuth应用程序流的SwashBuckle.AspNetCore 4.1.根据谷歌搜索,我的设置如下所示:

代码语言:javascript
复制
            options.AddSecurityDefinition("oauth2", new OAuth2Scheme
            {
                Type = "oauth2",
                Flow = "application",
                TokenUrl = "/token",
            });

这为我提供了带有client_id和client_secret文本框的Authorize对话框,但是当我查看fiddler中的请求时,我看到:

{“client_id”:“client_id字段是必填字段。”,“client_secret”:“client_secret字段是必填字段。”}

对于" password“流,它同时显示用户名/密码和client_id、client_secret文本框,并在填充的密码对中传递,但它始终传递密码授予,这对于client_id/secret是不正确的。

EN

回答 1

Stack Overflow用户

发布于 2019-10-18 22:16:38

如果你检查Fiddler,你会看到client_id和client_secret在授权的请求报头中。这将是字符串Basic,然后是您的用户名和密码,64位字符串编码。

就像这样

代码语言:javascript
复制
Authorization: Basic MTIzOmFiYw==

您的令牌方法需要执行以下操作

代码语言:javascript
复制
string authHeader = Request.Headers["Authorization"];
if (authHeader != null && authHeader.StartsWith("Basic"))
{
    string encodedUsernamePassword = authHeader.Substring("Basic ".Length).Trim();
    Encoding encoding = Encoding.GetEncoding("iso-8859-1");
    string usernamePassword = encoding.GetString(Convert.FromBase64String(encodedUsernamePassword));

     int seperatorIndex = usernamePassword.IndexOf(':');

     var clientId = usernamePassword.Substring(0, seperatorIndex);
     var clientSecret = usernamePassword.Substring(seperatorIndex + 1);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55367131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档