我正在尝试使用带有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。
答案 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);
}