OAuth Swashbuckle завершается ошибкой, когда ответ возвращается в o2c-html
Мой супер простой пример приложения Web API успешно рендерит документ swagger/ui. Но он не работает, если я пытаюсь настроить его для выполнения авторизованных вызовов OAuth 2.0.
Если вы нажмете значок, чтобы отобразить запрос согласия OAuth, а затем нажмите Authorize
кнопка, я успешно перенаправлен на login.microsoftonline.com
и я могу успешно предоставить учетные данные, но, когда я перенаправлен обратно в swagger/ui/o2c-html
Кажется, что динамически генерируемый JavaScript на этой странице глючит...
Сгенерирована страница "o2c-html":
<script>
var qp = null;
if(window.location.hash) {
qp = location.hash.substring(1);
}
else {
qp = location.search.substring(1);
}
qp = qp ? JSON.parse('{"' + qp.replace(/&/g, '","').replace(/=/g,'":"') + '"}',
function(key, value) {
return key===""?value:decodeURIComponent(value) }
):{}
if (window.opener.swaggerUi.tokenUrl)
window.opener.processOAuthCode(qp);
else
window.opener.onOAuthComplete(qp);
window.close();
</script>
Когда я наведите курсор на qp
переменная, я вижу, что я успешно получил требуемый токен на предъявителя, но, по мере выполнения, продолжается до окончательных условных операторов с window.opener
все терпит неудачу в window.opener.swaggerui
Я получаю следующую ошибку:
Ошибка времени выполнения JavaScript: не удалось получить свойство 'swaggerUi' с неопределенной или нулевой ссылкой
Я использую эти пакеты NuGet, FWIW:
<package id="Swashbuckle" version="5.5.3" targetFramework="net45" />
ОБНОВЛЕНИЕ - выяснил, что я ошибся
В моем случае у меня не было правильной конфигурации в SwaggerConfig.cs
в первом разделе EnableSwagger(c =>
:
Первоначально я настроил это так (не спрашивайте меня почему):
c.OAuth2("oauth2")
.Description("OAuth2 Implicit Grant")
.Flow("implicit")
.AuthorizationUrl(
string.Format("https://login.microsoftonline.com/{0}/oauth2/authorize",
ConfigurationManager.AppSettings["ida:Tenant"]))
.Scopes(scopes =>
{
scopes.Add("user_impersonation", "Access swagger");
});
Но теперь все это работает, когда я изменил его на исчерпывающий список моих реальных ролей, которые я использую в своих контроллерах...
c.OAuth2("oauth2")
.Description("OAuth2 Implicit Grant")
.Flow("implicit")
.AuthorizationUrl(
string.Format("https://login.microsoftonline.com/{0}/oauth2/authorize",
ConfigurationManager.AppSettings["ida:Tenant"]))
.Scopes(scopes =>
{
scopes.Add("AdminAccess", "Admin access to protected resources");
scopes.Add("FullAccess", "Full access to protected resources");
scopes.Add("UpdateAccess", "Update access to protected resources");
scopes.Add("ReadAcces", "Read access to protected resources");
});
1 ответ
Извините, это ошибка в Swagger-UI.
Последняя версия выглядит иначе, посмотрите здесь: src / main / html / o2c.html
Нам просто нужно опубликовать новый пакет NuGet Swashbuckle (надеюсь, скоро)