我创建了一个新的MVC5 Web应用程序,当我尝试使用Google或Facebook登录时,调用了ExternalLoginCallbackAction AccountController,但GetExternalLoginInfoAsync()始终返回null:
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
Run Code Online (Sandbox Code Playgroud)
因为它总是为null,所以它只是重定向回登录页面并且过程重新开始.我怎样才能解决这个问题?
我在这里尝试使用谷歌OAuth来验证我的节点快递应用程序中的用户.我可以成功执行OAuth,它会返回如下响应:
{
access_token: 'token string',
id_token: 'id.string',
expires_in: 3599,
token_type: "Bearer"
}
Run Code Online (Sandbox Code Playgroud)
这一切都有道理,但我不能为我的生活弄清楚如何解码JWT.我对这一切都缺乏经验,所以这对我来说有点陌生.
按照此处列出的说明操作:https://developers.google.com/accounts/docs/OAuth2Login#validatinganidtoken我正在尝试在我的节点应用中本地解码JWT.
我在我的节点环境中安装了https://github.com/hokaccha/node-jwt-simple.
而且我很确定我需要使用这个证书(https://www.googleapis.com/oauth2/v1/certs)以某种方式解码它,但我在这里有点不知所措.我真的不明白我如何将证书带入我的节点应用程序,之后如何将它与node-jwt-simple一起使用.而且我也不太了解我何时需要提取新证书,而不是使用缓存证书.
那些有经验的人可以帮助我吗?
谢谢你的帮助.我现在完全不知所措.
**更新**
所以我取得了一些进展......有点儿.通过调用jwt.decode(id_token,certificate,true); 我能够成功解码令牌.即使证书var是一个空对象{}.这给我留下了3个问题.1:使用谷歌网址将证书送入我的快递应用程序的最佳方法是什么?2:我怎么知道何时需要提供它的新版本?3:似乎传递给noVerify(jwt.decode中的第3个arg)的真实是一个糟糕的主意.如何在不通过的情况下实现这一目标?看起来似乎jwt-simple期待hs256并且令牌正在使用rs256.
再一次,我对此缺乏经验,所以我可能会离开这里.
*更新* 感谢Nat的帮助,我得到了这个工作!我想我尝试了每一个JWT和JWS节点模块.我最终登陆的内容如下:我发现我所看到的所有模块都没有完全符合我的想法.我创建了以下jwt解码辅助方法,我用它来解码id_token,所以我可以从标题中获取孩子.
module.exports = {
decodeJwt: function (token) {
var segments = token.split('.');
if (segments.length !== 3) {
throw new Error('Not enough or too many segments');
}
// All segment should be base64
var headerSeg = segments[0];
var payloadSeg = segments[1];
var signatureSeg = segments[2];
// base64 decode and parse …Run Code Online (Sandbox Code Playgroud) 多年来,我一直使用OpenID委托登录Stack Overflow(以及其他网站),使用我自己的URI作为OpenID,但让Google处理身份验证.我使用Stack Overflow问题中描述的技术; 所以,我的自定义OpenID http://tupelo-schneck.org/robert解析为包含以下内容的HTML页面:
<link href="https://www.google.com/accounts/o8/ud" rel="openid2.provider" />
<link href="https://www.google.com/profiles/schneck" rel="openid2.local_id" />
Run Code Online (Sandbox Code Playgroud)
然而,现在,我已登录Stack Overflow并让谷歌告诉我" 重要通知: 2015年4月20日,Google帐户的OpenID2将消失.了解详情." 此页面解释了Google已弃用OpenID 2.0,开发人员应将其应用迁移到OpenID Connect.
我是否可以继续使用自定义URI进行OpenID登录,但是委托给Google的OpenID Connect提供商进行身份验证?怎么样?
我正在为使用Google Apps登录的公司开发Intranet django项目(不使用GAE).所以我希望我的用户能够使用他们的谷歌帐户登录登录我的django项目.OpenID看起来很合适,虽然Oauth可能也有用吗?
我看到很多类似命名的库将django的auth系统连接到外部登录系统:
以下是我要对集成进行的操作:让用户使用他们的Google帐户登录,而不是使用本机django系统.保留django的管理系统之类的权限模型.所以我认为这意味着在我们登录之前没有看到的新帐户第一次在django中自动创建新的用户记录.
任何有这些项目经验的人都可以告诉我哪种方法效果最好?或者只是在您尝试过时最有效/最有效的建议?谢谢!
我是OpenID的新手,想在我的网站上实施Google OpenID身份验证.我找不到任何例子.
任何人都可以建议我一些很好的教程(一步一步)或任何使用PHP实现Google OpenID身份验证的代码的工作示例.
我完全遵循整合谷歌登录的说明:
https://developers.google.com/identity/sign-in/web/sign-in#specify_your_apps_client_id
登录有效,但注销会在行中出现javascript错误:
var auth2 = gapi.auth2.getAuthInstance();
错误是:
gapi.auth2 undefined
我按照说明添加了Google平台库:
<script type='text/javascript' src='https://apis.google.com/js/platform.js' async defer></script>
Run Code Online (Sandbox Code Playgroud)
为什么不起作用?
使用Google提供的快速入门示例,我已经能够登录Web应用程序以在Chrome和Firefox中使用.但是它在Internet Explorer(版本11)上失败.它会将用户登录到Google,但从data-onsuccess不会调用回调.通常没有任何错误通知.
我已阅读相关问题,并尝试了可信站点周围的建议.我还尝试调整IE何时接受第三方cookie,但这似乎都不起作用.
我正在使用的测试页面的代码如下(减去客户端ID)
<html>
<head>
<meta charset="ISO-8859-1">
<title>Google Sign In</title>
<script src="https://apis.google.com/js/platform.js" async defer></script>
<meta name="google-signin-client_id" content="CLIENT_ID_FROM_GOOGLE_HERE">
<script>
function onSignIn(googleUser) {
var profile = googleUser.getBasicProfile();
console.log('ID: ' + profile.getId());
console.log('Name: ' + profile.getName());
console.log('Image URL: ' + profile.getImageUrl());
console.log('Email: ' + profile.getEmail());
}
function signOut() {
console.log(document);
var auth2 = gapi.auth2.getAuthInstance();
auth2.signOut().then(function () {
console.log('User signed out.');
});
}
</script>
</head>
<body>
<h1>Login</h1>
<p>
This is a simple page to test Google Sign …Run Code Online (Sandbox Code Playgroud) iframe internet-explorer google-openid google-oauth google-signin
我搜索了高,低,远和宽,但在Internet上找不到列出这些模式的可用属性的任何内容.有谁知道这些文件的位置?到目前为止,我知道:
http://axschema.org/namePerson/first
http://axschema.org/namePerson/last
Jenkins和Gerrit都有适用于OpenID 2.0的插件,但是这个API已被Google于2014年5月19日(https://developers.google.com/accounts/docs/OpenID)弃用,因此无法使用新安装,现有安装必须迁移到OAuth2.0(OpendID连接).尝试使用OpenID 2.0时,您将收到错误消息"错误400:OpenID身份验证请求包含未注册的域".
Gerrit团队已经意识到这个问题,但尚无解决方案:https: //code.google.com/p/gerrit/issues/detail?id = 2677
詹金斯不确定.
我看到OpenID登录在任何地方都可用,并决定我应该考虑在我的服务器上实现我自己的提供程序,以便我可以控制我的信息和登录.
令人惊讶的是,这非常复杂和困难.
即使许多站点允许OpenID登录(例如这个),我发现了以下问题:
http://en.wikipedia.org/wiki/OpenID#Security
例如,从2013年8月开始,关于使用Google Plus/Profiles作为代表的SO的解决方案现在得到了Google的错误,称今年4月将从Google移除OpenID 2.0支持并替换为OpenID Connect:
将OpenID委托给Google(不是Google Apps)
有人甚至提供简单的OpenID Connect 单一身份提供商吗?查看OpenID的OpenID提供程序软件列表根本没有提到任何OpenID Connect解决方案,更不用说该页面在4年内没有更新!
http://wiki.openid.net/w/page/12995226/Run%20your%20own%20identity%20server
仔细查看所有这些信息,我很高兴我几年前搁置了我的计划,在我的服务器上实现OpenID 2.0,因为它看起来已经过时了,我想不出一个简单的方法来证明我的身份.令人惊讶的是,我不能只安装一个软件包并编辑配置文件.大多数更简单的实现涉及安装和使用PHP,它有自己需要了解的安全问题.
那么 - 任何一个OpenID专家和它的目标谁能给我一些关于如何设置我的身份提供者或者是否值得困难的建议?我希望控制我的信息和分发我的电子邮件地址以及拥有永久性身份,但如果标准不断变化那么它就不是永久性的.