我正在使用" IdentityServer3 -IdentityManager -MenderhipReboot",用于用户管理,身份验证&资源授权。
我从下面的示例开始,并有助于创建用户,通过/connect/token api对其进行认证并授权资源。https://github.com/thinktecture/thinktecture.inderityserver.v3.samples/tree/master/master/source/membershipreboot
我解决方案的简短架构是
-
MySQL作为数据库。通过会员Reboot.ef与会员blipreboot的通信。
-
使用html angularjs开发客户端项目。
-
资源API是使用Nancy&开发的。在一个单独的项目中托管在Owin Katana上。
-
身份验证服务(IDSVR IDMGR MR)托管在一个单独的项目中。
现在,我想创建一个简单的按钮/链接单击,将我带到Facebook登录。此按钮的功能应与IDSVR默认登录页面(https://localhost:44333/core/login?signin = 4F909A877CC465AF26D26D72F60EC08F51)" Facebook"。
我尝试过很多谷歌搜索的互联网,但没有任何案例与我的情况匹配。我什至尝试复制默认IDSVR Facebook登录的请求响应行为,但由于cookie并未保存在最终客户端上。
还尝试点击" https://localhost:44333/core/signin-facebook",并从服务器中获得响应,以 http/1.1 500内部服务器错误。因此,我认为我可能是在IDSRV项目中设置Facebook选项的某个地方。
因此,如果某人可以为我提供一个IDSVR API来连接或告诉我如何配置ID SVR,以便映射URL可以将其重定向到Facebook登录。或可以告诉我,在IDSRV中设置Facebook身份验证选项时,我在哪里错了。
我问题的简短答案是我正在寻找URL。
; wenspys_mode = form_post如果您想更好地了解此URL
,请进一步阅读经过大量命中;研究工作,我为此提供了解决方案。好吧,我认为出于这个问题的根本原因是突然的新技术事物(Owin,Katana,Oauth,IdentityServer,IdentityManagement,会员资助启动,Owin Facebook),并且有一个微不足道的时间来了解它们。
我会建议人们,无论谁在与我相同的情况下,然后首先了解Oauth的想法。我在下面的链接中找到了一个简短而又好的。
http://tutorials.jenkov.com/oauth2/index.html
之后,我了解到在我们的情况下,我们正在处理两个应用程序,因此正在处理两个认证。
用于将用户连接到Facebook。我们在developers.facebook.com
上创建了一个应用程序用于将用户连接到IdentityServer。我们在authenticationservices project上的clients.cs文件中创建了一个客户端。
所以现在是最终解决方案。localhost:44333 AuthenTicationService正在运行locahost:8088,在prontend Services正在运行的地方,以供应AuthenTicationService。
1。在Authenticationservices中创建客户端应用,如下
new Client
{
ClientName = "Implicit Clients",
Enabled = true,
ClientId = "implicitclient",
ClientSecrets = new List<ClientSecret>{
new ClientSecret("secret".Sha256())
},
Flow = Flows.Implicit,
RequireConsent = true,
AllowRememberConsent = true,
RedirectUris = new List<string>
{
"http://localhost:8088/login/auth" //This should be redirect url you want to hit after your app(not facebook app) redirects.
},
ScopeRestrictions = new List<string>
{
Constants.StandardScopes.OpenId,
Constants.StandardScopes.Profile,
Constants.StandardScopes.Email,
"read",
"write",
},
//SubjectType = SubjectTypes.Global,
AccessTokenType = AccessTokenType.Jwt,
IdentityTokenLifetime = 360,
AccessTokenLifetime = 360,
},
2创建授权URL如下
var client = new OAuth2Client(new Uri("https://localhost:44333/core/connect/authorize"));
var startUrl = client.CreateAuthorizeUrl(
clientId: "implicitclient",
responseType: "token",
scope: "read",
redirectUri: "http://localhost:8088/login/auth",
nonce: "random_nonce",
responseMode: "form_post",
acrValues: "idp:Facebook");
成功授权后的Facebook应用程序将默认为http://localhost:44333/signin-facebook。因此无需在此处进行任何更改。
最后在http://localhost:8088/login/auth成功后,您将获得access_token( 其他几个参数)。在此之前,您可以使用此令牌从资源服务器访问资源。