Oppeniddict - 如何跳过注销提示?
Oppeniddict - How to skip logout prompt?
我正在使用velusia示例,我希望客户端应用程序跳过注销提示页面,有没有具体的方法可以实现,还是我应该自己实现?
根据你的描述,建议你可以尝试在服务器端设置一个js代码自动点击退出按钮。
更多详情,您可以参考以下代码:
修改服务器注销视图如下:
@using Microsoft.Extensions.Primitives
<div class="jumbotron">
<h1>Log out</h1>
<p class="lead text-left">Are you sure you want to sign out?</p>
<form asp-controller="Authorization" asp-action="Logout" method="post">
@* Flow the request parameters so they can be received by the LogoutPost action: *@
@foreach (var parameter in Context.Request.HasFormContentType ?
(IEnumerable<KeyValuePair<string, StringValues>>) Context.Request.Form : Context.Request.Query)
{
<input type="hidden" name="@parameter.Key" value="@parameter.Value" />
}
<input class="btn btn-lg btn-success" id="Confirm" name="Confirm" type="submit" value="Yes" />
</form>
</div>
@section scripts{
<script>
$(document).ready(function() {
console.log("Fired");
document.getElementById("Confirm").click();
});
</script>
}
您如何处理注销请求由您决定。要在不显示同意书的情况下触发到客户端应用程序的重定向(当设置 post_logout_redirect_uri
时),请触发指向 OpenIddict 的 ASP.NET 核心 Logout
操作:
// Returning a SignOutResult will ask OpenIddict to redirect the user agent
// to the post_logout_redirect_uri specified by the client application or to
// the RedirectUri specified in the authentication properties if none was set.
return SignOut(
authenticationSchemes: OpenIddictServerAspNetCoreDefaults.AuthenticationScheme,
properties: new AuthenticationProperties
{
RedirectUri = "/"
});
也就是说,我不建议这样做:不需要用户同意或某种形式的防伪保护 - id_token_hint
可以提供帮助,使用 AuthenticateAsync()
从中检索委托人- 可能使有针对性的 DOS 攻击成为可能。
您还可以根据 Velusia 示例将 HTTP 方法更改为 GET 而不是 POST:
[HttpGet("logout")]
public async Task<IActionResult> LogoutPost()
{
await HttpContext.SignOutAsync(Clients.CmsApp);
await HttpContext.SignOutAsync(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme);
return SignOut(
authenticationSchemes: OpenIddictServerAspNetCoreDefaults.AuthenticationScheme,
properties: new AuthenticationProperties
{
RedirectUri = "/"
});
}
我正在使用velusia示例,我希望客户端应用程序跳过注销提示页面,有没有具体的方法可以实现,还是我应该自己实现?
根据你的描述,建议你可以尝试在服务器端设置一个js代码自动点击退出按钮。
更多详情,您可以参考以下代码:
修改服务器注销视图如下:
@using Microsoft.Extensions.Primitives
<div class="jumbotron">
<h1>Log out</h1>
<p class="lead text-left">Are you sure you want to sign out?</p>
<form asp-controller="Authorization" asp-action="Logout" method="post">
@* Flow the request parameters so they can be received by the LogoutPost action: *@
@foreach (var parameter in Context.Request.HasFormContentType ?
(IEnumerable<KeyValuePair<string, StringValues>>) Context.Request.Form : Context.Request.Query)
{
<input type="hidden" name="@parameter.Key" value="@parameter.Value" />
}
<input class="btn btn-lg btn-success" id="Confirm" name="Confirm" type="submit" value="Yes" />
</form>
</div>
@section scripts{
<script>
$(document).ready(function() {
console.log("Fired");
document.getElementById("Confirm").click();
});
</script>
}
您如何处理注销请求由您决定。要在不显示同意书的情况下触发到客户端应用程序的重定向(当设置 post_logout_redirect_uri
时),请触发指向 OpenIddict 的 ASP.NET 核心 Logout
操作:
// Returning a SignOutResult will ask OpenIddict to redirect the user agent
// to the post_logout_redirect_uri specified by the client application or to
// the RedirectUri specified in the authentication properties if none was set.
return SignOut(
authenticationSchemes: OpenIddictServerAspNetCoreDefaults.AuthenticationScheme,
properties: new AuthenticationProperties
{
RedirectUri = "/"
});
也就是说,我不建议这样做:不需要用户同意或某种形式的防伪保护 - id_token_hint
可以提供帮助,使用 AuthenticateAsync()
从中检索委托人- 可能使有针对性的 DOS 攻击成为可能。
您还可以根据 Velusia 示例将 HTTP 方法更改为 GET 而不是 POST:
[HttpGet("logout")]
public async Task<IActionResult> LogoutPost()
{
await HttpContext.SignOutAsync(Clients.CmsApp);
await HttpContext.SignOutAsync(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme);
return SignOut(
authenticationSchemes: OpenIddictServerAspNetCoreDefaults.AuthenticationScheme,
properties: new AuthenticationProperties
{
RedirectUri = "/"
});
}