我正在尝试在Django REST框架api上实现JWT身份验证,但是在解码来自令牌的签名时遇到了问题Auth0.我正在使用这个djangorestframework-jwt包.在django设置中,我已设置JWT_SECRET_KEY和JWT_AUDIENCE我的Auth0凭据,并尝试使用密钥的base64解码版本(Auth0声称密钥默认编码).我可以使用像jwt.io这样的在线工具成功解码其中一个传入的令牌,我甚至可以使用在终端中解码令牌
jwt.decode( token, base64.b64decode(JWT_SECRET_KEY.replace("_","/").replace("-","+")), JWT_AUDIENCE)
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,当我尝试允许djangorestframework-jwt解码令牌时,我每次都会在解码签名时出错.我知道这可能对某个问题有点过于具体,但希望之前处理过这个堆栈的人可以帮我一臂之力.
我试图使用索引文件中的system.config从我的angular2项目中的node_modules映射此Auth0模块.但我在浏览器控制台中收到404错误
索引文件
<!-- 2. Configure SystemJS -->
<script>
System.config({
packages: {
app: {
format: 'register',
defaultExtension: 'js'
},
"/angular2-jwt": {
"defaultExtension": "js"
}
},
map: {
"angular2-jwt": "node_modules/angular2-jwt/angular2-jwt"
}
});
System.import('app/bootstrap')
.then(null, console.error.bind(console));
</script>
Run Code Online (Sandbox Code Playgroud)
控制台错误如下
我已将脚本包含在索引文件中,如下所示
<script src="//cdn.auth0.com/js/lock-9.0.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
按照auth0网站上的node.js/angular 2教程
我正在尝试从Appcomponent.ts的模板加载登录按钮
Appcomponent.ts
import {Component} from 'angular2/core';
import {Router, RouteConfig, ROUTER_DIRECTIVES} from 'angular2/router';
import {AuthHttp,AuthConfig, tokenNotExpired, AUTH_PROVIDERS} from 'angular2-jwt';
import {HomeComponent} from '../home/HomeComponent'
import {AboutComponent} from '../about/AboutComponent'
declare var Auth0Lock;
@RouteConfig([
{path: 'app/', component: HomeComponent, as: 'Home'},
{path: 'app/about', component: AboutComponent, …Run Code Online (Sandbox Code Playgroud) 我正在尝试将auth0与我的angular2应用程序集成,但我得到一个错误说:
EXCEPTION: Error in ./AppComponent class AppComponent_Host - inline template:0:0BrowserDomAdapter.logError @ platform-browser.umd.js:937BrowserDomAdapter.logGroup @ platform-browser.umd.js:947ExceptionHandler.call @ core.umd.js:4389(anonymous function) @ core.umd.js:9890ZoneDelegate.invoke @ zone.js:332onInvoke @ core.umd.js:9245ZoneDelegate.invoke @ zone.js:331Zone.run @ zone.js:225(anonymous function) @ zone.js:591ZoneDelegate.invokeTask @ zone.js:365onInvokeTask @ core.umd.js:9236ZoneDelegate.invokeTask @ zone.js:364Zone.runTask @ zone.js:265drainMicroTaskQueue @ zone.js:497ZoneTask.invoke @ zone.js:437
platform-browser.umd.js:937
platform-browser.umd.js:937 Error: DI Exception
at NoProviderError.BaseException [as constructor] (core.umd.js:4472)
at NoProviderError.AbstractProviderError [as constructor] (core.umd.js:4602)
at new NoProviderError (core.umd.js:4638)
at ReflectiveInjector_._throwOrNull (core.umd.js:6532)
at ReflectiveInjector_._getByKeyDefault (core.umd.js:6560)
at ReflectiveInjector_._getByKey (core.umd.js:6523)
at ReflectiveInjector_.get (core.umd.js:6332)
at NgModuleInjector.get (core.umd.js:10386)
at DebugAppView._View_AppComponent_Host0.createInternal (AppComponent.ngfactory.js:20)
at …Run Code Online (Sandbox Code Playgroud) 我已经运行了下面的教程,将JHipster与auth0集成在一起. https://auth0.com/blog/quicktip-use-jhipster/
当我点击下面的帐户登录选项时,任何帮助将不胜感激!
非常感谢,KieranH
错误:auth未定义打开@ http://127.0.0.1:8080/app/components/login/login.service.js:23:17 +更多(需要至少10个声誉才能发布更多2个链接).
对于身份验证,我使用的是Auth0 AuthenticationApi.在Account Controller中,我需要获取user_metadata但它已丢失.获取user_metadata的任何替代方法?
AuthenticationApiClient client = new AuthenticationApiClient(new Uri($"https://{_auth0Options.Domain}/"));
var authenticateResponse = await client.GetTokenAsync(new ResourceOwnerTokenRequest
{
ClientId = _auth0Options.ClientId,
ClientSecret = _auth0Options.ClientSecret,
Scope = "openid",
Realm = _auth0Options.Connection,
Username = vm.EmailAddress,
Password = vm.Password
});
var user = await client.GetUserInfoAsync(authenticateResponse.AccessToken);
if (user.UserMetadata != null)
{
// Giving error...any alternative to access the userMetaData ?
}
Run Code Online (Sandbox Code Playgroud) 我在Express API中使用中间件来针对auth0进行验证
const checkJwt = jwt({
// Dynamically provide a signing key based on the kid in the header and the singing keys provided by the JWKS endpoint.
secret: jwksRsa.expressJwtSecret({
cache: true,
rateLimit: true,
jwksRequestsPerMinute: 5,
jwksUri: `https://${process.env.AUTH0_DOMAIN}/.well-known/jwks.json`
}),
// Validate the audience and the issuer.
audience: process.env.AUTH0_AUDIENCE,
issuer: `https://${process.env.AUTH0_DOMAIN}/`,
algorithms: ['RS256']
});
Run Code Online (Sandbox Code Playgroud)
...
server.use('/api', checkJwt, routes);
Run Code Online (Sandbox Code Playgroud)
它可以在我本地的开发机器上运行,但是当我在生产环境中运行它时,我得到:
Error: getaddrinfo ENOTFOUND undefined undefined:443
at errnoException (dns.js:28:10)
at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)
Run Code Online (Sandbox Code Playgroud)
我在生产环境和Mac开发环境中运行ubuntu 12。
(使用 React)我有一个/login路由和一个/signup显示Login和SignUp组件的路由。在我的Login组件中,我使用Auth0 的 Lock 组件来显示登录表单,并且我还使用container配置选项 让表单以我自己的方式显示,div而不是作为默认模式显示。
当我的Login组件第一次加载时(或在/login路由刷新后),Auth0 Lock 组件正确加载。我的问题是当我从/login路线导航到/signup路线然后返回/login路线时,Auth0 Lock 组件根本没有加载。检查页面时,我可以看到我的页面container div是空的。
我在 Auth0 的 github 上发现了这个问题,其他人使用 Angular遇到了同样的问题,但他们的解决方案是设置auth.config.auth0lib.$container为nullwhich 似乎不是一个好的解决方案。
8月28日更新:下面完全相同的软件包配置,但zone.js 0.8.16不会产生任何错误.知道为什么吗?
编辑:我一直试图找出问题的来源.如果这是一个无限循环,它究竟发生了什么,但我无法破解polyfill或vendor中的代码.
我正在使用Firebase Hosting部署我的Angular应用程序.使用localhost进行编译和测试时,一切正常.但是当我在Firebase Hosting上部署时,我的实时站点永远无法绕过使用Auth0登录,在控制台中无休止地给出了同样的错误.如何确切地找出导致错误的原因?
Uncaught RangeError: Maximum call stack size exceeded
(anonymous) @ polyfills.70fc3f963669a0ddfcd2.bundle.js:1
o.(anonymous function) @ polyfills.70fc3f963669a0ddfcd2.bundle.js:1
(anonymous) @ vendor.bd83d2a24392414468c4.bundle.js:1
_makeRequest @ vendor.bd83d2a24392414468c4.bundle.js:1
_sendProcessedPayload @ vendor.bd83d2a24392414468c4.bundle.js:1
_send @ vendor.bd83d2a24392414468c4.bundle.js:1
_processException @ vendor.bd83d2a24392414468c4.bundle.js:1
_handleStackInfo @ vendor.bd83d2a24392414468c4.bundle.js:1
captureException @ vendor.bd83d2a24392414468c4.bundle.js:1
r @ vendor.bd83d2a24392414468c4.bundle.js:1
L @ polyfills.70fc3f963669a0ddfcd2.bundle.js:1
r @ vendor.bd83d2a24392414468c4.bundle.js:1
L @ polyfills.70fc3f963669a0ddfcd2.bundle.js:1
r @ vendor.bd83d2a24392414468c4.bundle.js:1
L @ polyfills.70fc3f963669a0ddfcd2.bundle.js:1
r @ vendor.bd83d2a24392414468c4.bundle.js:1
L @ polyfills.70fc3f963669a0ddfcd2.bundle.js:1
r @ vendor.bd83d2a24392414468c4.bundle.js:1
L @ polyfills.70fc3f963669a0ddfcd2.bundle.js:1
r @ vendor.bd83d2a24392414468c4.bundle.js:1
L @ polyfills.70fc3f963669a0ddfcd2.bundle.js:1
r …Run Code Online (Sandbox Code Playgroud)我正在使用auth0对用户进行身份验证,以接收包含以下声明的id令牌
"http://myapp.com/scope": "write"
Run Code Online (Sandbox Code Playgroud)
使用带有OpenID身份验证提供程序的Cognito身份池(即auth0),我能够成功获取临时凭据以访问aws服务.但是,我想根据上面的自定义声明限制对这些服务的访问.我认为正确的方法是编辑与我的身份池关联的信任策略,但我不确定如何在我的信任策略中添加条件来检查上述声明.
当前的默认信任策略是
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-2:078855cf-aa9b-400e-a762-dfcf27ec495c"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
如何确保只有具有auth0 "write"范围的用户才能访问我的s3服务?
更新:
我能够通过避免认知身份池将原始id_token传递给aws.但是,auth0强制我的自定义声明被命名空间"http://mywebsite.com".这是一个问题,因为IAM在我的情况下不允许多个冒号.我需要添加条件
"ForAnyValue:StringLike": {
"food-flick.auth0.com/:https://foodflick.com/scope": "write:rests"
}
Run Code Online (Sandbox Code Playgroud)
但IAM不允许它,Auth0强迫我命名我的声明.我能做什么?我可以将我的范围存储在标准声明中,但这会产生误导.我可以将访问令牌而不是我的id_token传递给IAM吗?如果是这样,在给定值数组时,如何更改信任策略以检查适当的aud值?
amazon-s3 amazon-web-services amazon-iam amazon-cognito auth0
我正在ASP.NET Core 2.1中开发一个应用程序,并在Kubernetes群集上运行它。我已经使用Auth0作为提供者,使用OpenIDConnect实现了身份验证。
这一切都很好。标有该[Authorize]属性的操作或控制器将匿名用户重定向到身份提供者,他们登录,重定向回来,而Bob是您的叔叔。
当我将部署扩展到2个或更多容器时,就会开始出现问题。当用户访问应用程序时,他们将登录,并根据回调过程中为它们提供服务的容器,身份验证是成功还是失败。即使在身份验证成功的情况下,当用户点击未授权的容器时,反复进行F5-ing操作也会最终重定向到身份提供者。
我对此的思路是,使用cookie身份验证,用户将cookie存储在浏览器中,并随每个请求一起传递,应用程序对其进行解码并获取JWT,然后从中获取声明,然后用户已认证。这使整个事情变得无状态,因此,不管为请求提供服务的容器如何,它都应该工作。但是,如上所述,它似乎并没有以这种方式实际工作。
我的配置Startup.cs如下所示:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie()
.AddOpenIdConnect("Auth0", options =>
{
options.Authority = $"https://{Configuration["Auth0:Domain"]}";
options.ClientId = Configuration["Auth0:ClientId"];
options.ClientSecret = Configuration["Auth0:ClientSecret"];
options.ResponseType = "code";
options.Scope.Clear();
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name"
};
options.SaveTokens = true;
options.CallbackPath = new PathString("/signin-auth0");
options.ClaimsIssuer = "Auth0";
options.Events = new OpenIdConnectEvents
{
OnRedirectToIdentityProviderForSignOut = context =>
{
var logoutUri =
$"https://{Configuration["Auth0:Domain"]}/v2/logout?client_id={Configuration["Auth0:ClientId"]}";
var postLogoutUri …Run Code Online (Sandbox Code Playgroud) auth0 ×10
angular ×3
javascript ×3
amazon-iam ×1
amazon-s3 ×1
angular-cli ×1
angularjs ×1
asp.net-core ×1
c# ×1
django ×1
express ×1
jhipster ×1
jwt ×1
kubernetes ×1
linux ×1
node.js ×1
oauth-2.0 ×1
python ×1
reactjs ×1
undefined ×1
zonejs ×1