Я создал собственный файл SwaggerUI (index.html) в приложении ReactJS, который доступен по адресу myapplication.com/docs/swagger/index.html. Поскольку маршрут проходит через /docs/, применяется аутентификация STS. Однако SwaggerUI извлекает данные из конечной точки /swagger/v1/swagger.json, которая в настоящее время незащищена, что позволяет любому получить к ней доступ по адресу myapplication.com/swagger/v1/swagger.json. Как я могу защитить эту конечную точку в .NET 8?
ReactJS:
App.tsx
import React, { useState } from 'react'
import SwaggerUI from 'swagger-ui-react'
import 'swagger-ui-react/swagger-ui.css'
import { GettingStartedSection } from 'sections/getting-started'
const App = () => {
const [activeItem, setActiveItem] = useState('getting-started')
return (
)
}
export default App
root-app.tsx
import React from 'react'
import { Route, BrowserRouter, Switch } from 'react-router-dom'
import { AuthContextProvider } from './contexts/auth.context'
import { AuthzContextProvider } from './contexts/authz.context'
import { UserContextProvider } from './contexts/user'
import { AuthCallbackPage, LogoutCallbackPage, LogoutPage, SilentRenewPage } from './pages/auth'
import { AuthorizedRoute } from './routes/authorized-route'
import App from './App'
const RootApp = () => {
const returnEmptyComponent = () =>
return (
)
}
export default RootApp
Код C#:
app.UseSwagger();
app.UseSwaggerUI(options =>
{
// build a swagger endpoint for each discovered API version
bool isPathPrefixDefined = !string.IsNullOrWhiteSpace(swaggerOptions?.PathPrefix);
if (isPathPrefixDefined)
{
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerEndpoint($"{swaggerOptions.PathPrefix}/swagger/{description.GroupName}/swagger.json",
$"{swaggerOptions.GeneratedJsonName} {description.GroupName.ToUpperInvariant()}");
}
}
else
{
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
}
}
if (swaggerOptions.IncludeAuthentication)
{
options.OAuthClientId(swaggerOptions.SecurityDefinition.ClientId);
options.OAuthClientSecret(swaggerOptions.SecurityDefinition.ClientSecret);
}
});
Подробнее здесь: https://stackoverflow.com/questions/790 ... e-in-net-8
Как защитить маршрут swagger/1.0/swagger.json в .NET 8? ⇐ C#
Место общения программистов C#
-
Anonymous
1728575238
Anonymous
Я создал собственный файл SwaggerUI (index.html) в приложении ReactJS, который доступен по адресу myapplication.com/docs/swagger/index.html. Поскольку маршрут проходит через /docs/, применяется аутентификация STS. Однако SwaggerUI извлекает данные из конечной точки /swagger/v1/swagger.json, которая в настоящее время незащищена, что позволяет любому получить к ней доступ по адресу myapplication.com/swagger/v1/swagger.json. Как я могу защитить эту конечную точку в .NET 8?
[b]ReactJS:[/b]
App.tsx
import React, { useState } from 'react'
import SwaggerUI from 'swagger-ui-react'
import 'swagger-ui-react/swagger-ui.css'
import { GettingStartedSection } from 'sections/getting-started'
const App = () => {
const [activeItem, setActiveItem] = useState('getting-started')
return (
)
}
export default App
root-app.tsx
import React from 'react'
import { Route, BrowserRouter, Switch } from 'react-router-dom'
import { AuthContextProvider } from './contexts/auth.context'
import { AuthzContextProvider } from './contexts/authz.context'
import { UserContextProvider } from './contexts/user'
import { AuthCallbackPage, LogoutCallbackPage, LogoutPage, SilentRenewPage } from './pages/auth'
import { AuthorizedRoute } from './routes/authorized-route'
import App from './App'
const RootApp = () => {
const returnEmptyComponent = () =>
return (
)
}
export default RootApp
[b]Код C#:[/b]
app.UseSwagger();
app.UseSwaggerUI(options =>
{
// build a swagger endpoint for each discovered API version
bool isPathPrefixDefined = !string.IsNullOrWhiteSpace(swaggerOptions?.PathPrefix);
if (isPathPrefixDefined)
{
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerEndpoint($"{swaggerOptions.PathPrefix}/swagger/{description.GroupName}/swagger.json",
$"{swaggerOptions.GeneratedJsonName} {description.GroupName.ToUpperInvariant()}");
}
}
else
{
foreach (var description in provider.ApiVersionDescriptions)
{
options.SwaggerEndpoint($"/swagger/{description.GroupName}/swagger.json", description.GroupName.ToUpperInvariant());
}
}
if (swaggerOptions.IncludeAuthentication)
{
options.OAuthClientId(swaggerOptions.SecurityDefinition.ClientId);
options.OAuthClientSecret(swaggerOptions.SecurityDefinition.ClientSecret);
}
});
Подробнее здесь: [url]https://stackoverflow.com/questions/79073570/how-to-protect-swagger-1-0-swagger-json-route-in-net-8[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия