我正在尝试将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) 我有一个使用Angular 2的简单应用程序.我目前使用NgModule在RC5上.我使用的是3.0.0-beta.2路由器.
我的默认应用网址目前是
当我使用Auth0服务登录时,在成功登录后,在URL中获取access_token和id_token.重定向网址看起来像这样
HTTP://本地主机:8080 /#=的access_token&YKXQzxxx = id_token eyjQWASxxx
但现在Angular路由器尝试将其映射为路由.所以我得到以下错误.
**
未捕获(承诺):错误:无法匹配任何路线:'access_token'
**
有没有办法告诉Angular不要这样做.我希望将数据作为路由器参数读回.请帮忙.
我需要在我们的项目中集成Auth0(Reactjs/Hapijs/MySQL).我检查了文档,他们有很多例子,这很好,但是,我找不到任何与我如何使用现有用户数据库有关的信息.
在我的应用程序中,我有用户,这些用户可以有一个或多个项目.通过我们当前使用的授权,用户登录,我检查他拥有哪些项目并将其发送到React应用程序.
我错过了一个文档,它解释了我如何使用Auth0并仍然可以检查我的数据库用户拥有什么项目.
关于它应该如何工作的想法(我可能错了):
这是它应该如何工作?
对于身份验证,我使用的是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) Auth0重定向到http:// localhost:3000/callback#/ acccess-token = dxy
我的反应应用程序中出现了一个空白屏幕.
继承人我的主要app.js
render((
<HashRouter>
<Main />
</HashRouter>
), $('#app')[0]);Run Code Online (Sandbox Code Playgroud)
我的主要包含我的routes.js组件.
class Routes extends Component {
constructor(props, context) {
super(props, context);
this.state = { mainData: this.props.mainData };
this.handleAuthentication = this.handleAuthentication.bind(this)
}
componentWillReceiveProps(newProps) {
this.setState((previousState) => update(previousState, {
mainData: { $set: newProps.mainData },
}));
}
handleAuthentication(nextState, replace) {
if (/access_token|id_token|error/.test(nextState.location.hash)) {
this.props.auth.handleAuthentication();
}
}
render() {
return (
<div>
<Switch>
<Route path='/callback' render={props => {
this.handleAuthentication(props);
return <Callback {...props} />
}} />
<Route exact path='/' render={props …Run Code Online (Sandbox Code Playgroud)我正在使用环回反应.我想在环回中集成反应代码.如果我做这3个步骤
1)middleware.json - put this
"files": {
"loopback#static": {
"params":"$!../client"
}
},`
2)root.js
router.get('/');
3)front end code
"build": "react-scripts build && cp -r build/* ../client/",
Run Code Online (Sandbox Code Playgroud)
那打开了我在localhost上的反应站点:3000.现在问题是当我这样做时我无法访问我的环回:3000/explorer所以我的第一个问题是在这种情况下,如何访问资源管理器.
但后来我回滚了,因为我想再次使用环回资源管理器.
所以,我删除了所有这些添加的代码和浏览器回来,但当我再次添加它现在,我没有看到我的反应代码
我仍然可以在http:// localhost:3000/explorer /看到探险家, 如果我去http:// localhost:3000/apphome 我看到404错误
现在,我的middleware.json文件用于环回
{
"initial:before": {
"loopback#favicon": {}
},
"initial": {
"compression": {},
"cors": {
"params": {
"origin": true,
"credentials": true,
"maxAge": 86400
}
},
"helmet#xssFilter": {},
"helmet#frameguard": {
"params": [
"deny"
]
},
"helmet#hsts": {
"params": {
"maxAge": 0,
"includeSubdomains": true
}
},
"helmet#hidePoweredBy": …Run Code Online (Sandbox Code Playgroud) 我在我现有的常规php Web应用程序中使用auth0.
我的网站上有免费用户和付费用户.对于免费用户注册过程很简单,我调用create user api来触发验证邮件.
但对于付费用户,我有一个多步形式.在第一步中,用户输入他的信息并在应用程序中注册为免费用户,然后重定向到支付页面.我不能在第一步之后调用auth0 reg api,因为用户将在付款前立即获得验证电子邮件.
如果我在成功付款后拨打电话,则无法跟踪用户是否退出(不填写付款表单,但已注册为免费用户).请建议我应遵循的方法.
提前致谢
我正在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) 由于目前没有适用于 SvelteKit 的 Auth0 SDK,因此当我打算将 Auth0 合并到我的 SvelteKit 应用程序中(包括服务器端身份验证)时,我正在学习(或至少尝试学习)有关身份验证的知识,这比我最初的意图要多得多。该文档有点令人困惑(或者可能它只是很大,或者可能我只是不那么聪明),所以我希望在这里描述我的身份验证流程以供批评(希望这对将来的其他人有帮助) )。
\n我已经阅读了这篇关于 SPA auth以及Auth0 教育产品的精彩文章。但我仍然不确定我是否正确地将这些点连接起来。这是我的流程。所有这一切仅通过 SSL 发生。
\nSameSite=strict; HTTPOnly; Secure;设置了选项),以便它通过路由授权请求传递回服务器。所以让我在这里暂停一下...我明白(至少根据一些内容,包括上面链接的 Auth0 教育视频)ID 令牌不应该用于身份验证,并且永远不应该被传递。这就是访问令牌的用途。然而,在这种情况下,交换都是第一方(我的客户端,我的服务器),我的理解是“可以”。
\n然而,Auth0 SDK 本身并没有设置 cookie,这确实让我感到紧张。这让我怀疑我是否做错了\xe2\x84\xa2。
\n在服务器上,我使用公钥验证 id_token,然后可以根据需要在后端保存用户详细信息等,并允许访问适当的路由(hooks.server.js在我的 SvelteKit 应用程序中通过)。
当用户注销或令牌过期时,cookie 将被删除。
\n(顺便说一句,我还没有弄清楚如何在 ID 令牌过期时刷新它,因为 Auth0 客户端 SDK 似乎永远不会更新浏览器存储中的 ID 令牌,即使它已过期。)
\n …auth0 ×10
angular ×3
javascript ×3
reactjs ×3
access-token ×1
asp.net-core ×1
c# ×1
kubernetes ×1
loopbackjs ×1
mysql ×1
oauth ×1
oauth-2.0 ×1
react-native ×1
react-router ×1
routing ×1
sveltekit ×1