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

时间:2019-03-26 22:33:44

标签: c# oauth-2.0 .net-core swagger swagger-ui

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

            options.AddSecurityDefinition("oauth2", new OAuth2Scheme
            {
                Type = "oauth2",
                Flow = "application",
                TokenUrl = "/token",
            });

这为我提供了带有client_id和client_secret文本框的“授权”对话框,但是当我在提琴手中查看请求时,会看到:

{“ client_id”:[“ client_id字段为必填。”],“ client_secret”:[“ client_secret字段为必填。”]}

通过“密码”流,它既显示用户名/密码,又显示client_id和client_secret文本框,并在填充对中传递,但始终传递密码授予,这不适用于client_id / secret。

1 个答案:

答案 0 :(得分:0)

如果选中Fiddler,您将看到client_id和client_secret在授权下的请求标头中。这将是字符串Basic,然后是您的用户名和密码(以64为基础的字符串)。

类似

Authorization: Basic MTIzOmFiYw==

您的令牌方法需要做类似的事情

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);
}