我正在尝试遵循简单的指南
mvcGettingStarted.
现在,我已经实现了GoogleAuthentication和FacebookAuthentication提供程序,一切都按预期工作,我实际上可以登录,如果我使用我的身份服务器登录,我还获得了每个用户的角色声明.
我想知道,如果我想保留外部提供商提供的所有索赔怎么办?
简单的例子.
这就是我的Facebook提供商设置的样子:
现在,我已经实现了GoogleAuthentication和FacebookAuthentication提供程序,一切都按预期工作,我实际上可以登录,如果我使用我的身份服务器登录,我还获得了每个用户的角色声明.
我想知道,如果我想保留外部提供商提供的所有索赔怎么办?
简单的例子.
这就是我的Facebook提供商设置的样子:
var facebookOptions = new FacebookAuthenticationoptions() { AuthenticationType = "Facebook",Caption = "Sign in with Facebook",AppId = "*****",AppSecret = "****",SignInAsAuthenticationType = signInAsType,Provider = new FacebookAuthenticationProvider() { OnAuthenticated = (context) => { foreach (var x in context.User) { context.Identity.AddClaim(new Claim(x.Key,x.Value.ToString())); } return Task.Fromresult(context); } },}; facebookOptions.Scope.Add("email"); facebookOptions.Scope.Add("public_profile"); facebookOptions.Scope.Add("user_friends"); app.UseFacebookAuthentication(facebookOptions);
在每个循环中我试图将所有Facebook声明存储在Identity中,但是当我回到SecurityTokenValidated回调时,我的身份没有它们.
app.USEOpenIdConnectAuthentication(new OpenIdConnectAuthenticationoptions() { Authority = "https://localhost:44302/identity/",ClientId = "my_client",Scope = "openid profile roles email",RedirectUri = "https://localhost:44302/",ResponseType = "id_token token",SignInAsAuthenticationType = "Cookies",UsetokenLifetime = false,Notifications = new OpenIdConnectAuthenticationNotifications() { SecurityTokenValidated = async context => { //let's clean up this identity //context.AuthenticationTicket.Identity doesn't have the claims added in the facebook callback var nid = new ClaimsIdentity( context.AuthenticationTicket.Identity.AuthenticationType,Constants.ClaimTypes.Givenname,Constants.ClaimTypes.Role); ........
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。