gpt4 book ai didi

c# - 使用 owin 和 Nancy 进行 Oauth 身份验证

转载 作者:太空狗 更新时间:2023-10-29 17:56:13 27 4
gpt4 key购买 nike

按照本指南在 Owin 上使用 MVC 5 进行外部身份验证 - External login providers with owinkatana .

我已将以下内容添加到我的 Owin Nancy 申请中

Startup.cs -

app.Properties["Microsoft.Owin.Security.Constants.DefaultSignInAsAuthenticationType"] = "ExternalCookie";
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ExternalCookie",
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
});

app.UseTwitterAuthentication(new TwitterAuthenticationOptions
{
ConsumerKey = "mykey",
ConsumerSecret = "mypass"
});

LoginModule.cs(南希模块)

Post["ExternalLogin"] = _ =>
{
var provider = Request.Form.name;
var auth = Context.GetAuthenticationManager();
auth.Challenge(new AuthenticationProperties
{
RedirectUri = String.Format("/?provder={0}", provider)
}, provider);
return HttpStatusCode.Unauthorized;
};

现在在挑战点这里什么也没有发生。它只显示一个带有重定向 Url 的空白页面。我已经确认我可以按照 MVC 中的示例让它工作。有谁知道这部分的正确 Nancy 代码?

最佳答案

我将对我即将发表的评论进行扩展,并将其作为答案(即使您似乎离开了 Nancy)。我 asked a similar question , 并指向 github 上的以下代码示例:

https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/tree/dev/samples/Nancy/Nancy.Client

假设您在 Startup.cs 中正确连接了 OIDC,我需要以下代码来让 Nancy 模块在我的登录/注销路由上触发身份验证:

namespace Nancy.Client.Modules {
public class AuthenticationModule : NancyModule {
public AuthenticationModule() {
Get["/signin"] = parameters => {
var manager = Context.GetAuthenticationManager();
if (manager == null) {
throw new NotSupportedException("An OWIN authentication manager cannot be extracted from NancyContext");
}

var properties = new AuthenticationProperties {
RedirectUri = "/"
};

// Instruct the OIDC client middleware to redirect the user agent to the identity provider.
// Note: the authenticationType parameter must match the value configured in Startup.cs
manager.Challenge(properties, OpenIdConnectAuthenticationDefaults.AuthenticationType);

return HttpStatusCode.Unauthorized;
};

Get["/signout"] = Post["/signout"] = parameters => {
var manager = Context.GetAuthenticationManager();
if (manager == null) {
throw new NotSupportedException("An OWIN authentication manager cannot be extracted from NancyContext");
}

// Instruct the cookies middleware to delete the local cookie created when the user agent
// is redirected from the identity provider after a successful authorization flow.
manager.SignOut("ClientCookie");

// Instruct the OpenID Connect middleware to redirect
// the user agent to the identity provider to sign out.
manager.SignOut(OpenIdConnectAuthenticationDefaults.AuthenticationType);

return HttpStatusCode.OK;
};
}
}
}

代码来源:https://github.com/aspnet-contrib/AspNet.Security.OpenIdConnect.Server/blob/dev/samples/Nancy/Nancy.Client/Modules/AuthenticationModule.cs

希望对您有所帮助!

关于c# - 使用 owin 和 Nancy 进行 Oauth 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23786973/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com