dreamfactorysoftware / dreamfactory

DreamFactory API Management Platform
https://www.dreamfactory.com
Apache License 2.0
1.56k stars 314 forks source link

DF 2.10 Authentication mode changes sporadically causing fail state. #168

Open wmcbruce opened 6 years ago

wmcbruce commented 6 years ago

Running 2.10 on AWS. After the system has been running for some time (variable hours, not days), all authentication starts to fail. This coincides with admin portal login UI changes that add stub OAuth and SAML elements.

When this occurs, the login UI looks like this:

screenshot 2017-11-12 11 51 10

When the system is in this state, no login functionality works. Both the portal and the API fail to log a user or admin into the system.

Once this happens, I clear all caches on the server and restart, which causes the system to revert to desired functionality and the admin portal login is correct again:

screenshot 2017-11-12 11 57 24

Note that this seems to happen when no changes have been made to the user service, no services added involving OAuth or SAML, and no other configuration changes made.

leehicks commented 6 years ago

@wmcbruce Is this install from a Bitnami installer or direct from GitHub? Could you please provide us the dreamfactory/df-admin-app version you are running (admin app Config tab should show you a list of dependencies). We did retag the release with updated dependencies, so do a git pull on the dreamfactory install directory and see if are running the latest. A composer install may be required if there is an update.

wmcbruce commented 6 years ago

This was the 1-click deploy package on Amazon, so Bitnami I believe. It installs DF 2.7, but I upgraded to 2.10 using the instructions here.

I am actually using the steps on that page beginning with the cache clearing to get the site working each time it happens.

Installed dependencies:

Name | Version
-- | --
aws/aws-sdk-php | 3.37.1
barryvdh/laravel-cors | v0.8.6
clue/stream-filter | v1.4.0
doctrine/annotations | v1.4.0
doctrine/cache | v1.6.2
doctrine/collections | v1.4.0
doctrine/common | v2.7.3
doctrine/dbal | v2.5.13
doctrine/inflector | v1.2.0
doctrine/lexer | v1.0.1
dready92/php-on-couch | 1.0.1-p2
dreamfactory/azure-documentdb-php-sdk | 0.2.1
dreamfactory/df-admin-app | 2.12.2
dreamfactory/df-api-docs-ui | 1.1.1
dreamfactory/df-apidoc | 0.5.0
dreamfactory/df-aws | 0.14.0
dreamfactory/df-azure | 0.14.0
dreamfactory/df-cache | 0.10.0
dreamfactory/df-cassandra | 0.11.0
dreamfactory/df-core | 0.13.0
dreamfactory/df-couchbase | 0.9.0
dreamfactory/df-couchdb | 0.14.0
dreamfactory/df-database | 0.8.0
dreamfactory/df-email | 0.7.0
dreamfactory/df-file | 0.5.0
dreamfactory/df-filemanager-app | 0.3.0
dreamfactory/df-firebird | 0.6.0
dreamfactory/df-git | 0.2.0
dreamfactory/df-mongodb | 0.14.0
dreamfactory/df-oauth | 0.13.0
dreamfactory/df-rackspace | 0.13.0
dreamfactory/df-rws | 0.13.1
dreamfactory/df-script | 0.7.0
dreamfactory/df-sqldb | 0.14.0
dreamfactory/df-user | 0.13.0
dreamfactory/installer | 1.0.1
erusev/parsedown | 1.6.3
graham-campbell/github | v5.1.0
graham-campbell/manager | v2.5.0
guzzlehttp/guzzle | 6.3.0
guzzlehttp/promises | v1.3.1
guzzlehttp/psr7 | 1.4.2
jacquestvanzuydam/laravel-firebird | dev-5.4-support
jenssegers/mongodb | v3.2.3
knplabs/github-api | 2.6.0
kriswallsmith/buzz | v0.15.1
laravel/framework | v5.4.36
laravel/socialite | v2.0.21
league/flysystem | 1.0.41
league/flysystem-sftp | 1.0.14
league/flysystem-webdav | 1.0.5
league/oauth1-client | 1.7.0
m4tthumphrey/php-gitlab-api | 7.15.0
microsoft/azure-storage | v0.13.0
mongodb/mongodb | 1.0.5
monolog/monolog | 1.23.0
mtdowling/cron-expression | v1.2.1
mtdowling/jmespath.php | 2.4.0
namshi/jose | 7.2.3
nesbot/carbon | 1.22.1
paragonie/random_compat | v2.0.11
php-http/cache-plugin | v1.4.0
php-http/client-common | v1.6.0
php-http/discovery | 1.3.0
php-http/guzzle6-adapter | v1.1.1
php-http/httplug | v1.1.0
php-http/message | 1.6.0
php-http/message-factory | v1.0.2
php-http/promise | v1.0.0
phpseclib/phpseclib | 2.0.7
predis/predis | v1.1.1
psr/cache | 1.0.1
psr/http-message | 1.0.1
psr/log | 1.0.2
rackspace/php-opencloud | V1.5.10
ramsey/uuid | 3.7.1
sabre/dav | 3.2.2
sabre/event | 3.0.0
sabre/http | 4.2.3
sabre/uri | 1.2.1
sabre/vobject | 4.1.3
sabre/xml | 1.5.0
socialiteproviders/manager | v2.2.1
socialiteproviders/microsoft-live | v2.1.0
socialiteproviders/twitter | v2.0.2
swiftmailer/swiftmailer | v5.4.8
symfony/console | v3.3.10
symfony/css-selector | v3.3.10
symfony/debug | v3.3.10
symfony/event-dispatcher | v3.3.10
symfony/finder | v3.3.10
symfony/http-foundation | v3.3.10
symfony/http-kernel | v3.3.10
symfony/options-resolver | v3.3.10
symfony/polyfill-mbstring | v1.6.0
symfony/polyfill-php56 | v1.6.0
symfony/polyfill-util | v1.6.0
symfony/process | v3.3.10
symfony/routing | v3.3.10
symfony/translation | v3.3.10
symfony/var-dumper | v3.3.10
symfony/yaml | v3.3.10
tijsverkoyen/css-to-inline-styles | 2.2.0
tymon/jwt-auth | 1.0.0-rc.1
vinkla/gitlab | 2.6.0
vlucas/phpdotenv | v2.4.0
leehicks commented 6 years ago

This issue seems to be due to an exception thrown from the api/v2/system/environment call being made from the UI. Could you please check your browser debugger for network exceptions or the dreamfactory.log file (in /storage/logs/ by default) around the time you experience this issue and send us any exceptions or tracebacks noted.

wmcbruce commented 6 years ago

In dreamfactory log, this occurs many times:

[2017-11-14 15:51:58] local.ERROR: ErrorException: file_put_contents(/opt/bitnami/apps/dreamfactory/htdocs/storage/framework/cache/data/89/30/89307b64e2edec772a421cd038ab902464c8fd1c): failed to open stream: Permission denied in /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:122
Stack trace:
#0 [internal function]: Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(2, 'file_put_conten...', '/opt/bitnami/ap...', 122, Array)
#1 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php(122): file_put_contents('/opt/bitnami/ap...', '1510692718O:39:...', 2)
#2 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Cache/FileStore.php(66): Illuminate\Filesystem\Filesystem->put('/opt/bitnami/ap...', '1510692718O:39:...', true)
#3 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Cache/Repository.php(175): Illuminate\Cache\FileStore->put('df-cors-config', Object(Illuminate\Database\Eloquent\Collection), 300)
#4 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Cache/Repository.php(291): Illuminate\Cache\Repository->put('df-cors-config', Object(Illuminate\Database\Eloquent\Collection), 300)
#5 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Cache/CacheManager.php(305): Illuminate\Cache\Repository->remember('df-cors-config', 300, Object(Closure))
#6 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(221): Illuminate\Cache\CacheManager->__call('remember', Array)
#7 /opt/bitnami/apps/dreamfactory/htdocs/vendor/dreamfactory/df-core/src/Providers/CorsServiceProvider.php(112): Illuminate\Support\Facades\Facade::__callStatic('remember', Array)
#8 /opt/bitnami/apps/dreamfactory/htdocs/vendor/dreamfactory/df-core/src/Providers/CorsServiceProvider.php(70): DreamFactory\Core\Providers\CorsServiceProvider->getCorsConfigs()
#9 /opt/bitnami/apps/dreamfactory/htdocs/vendor/dreamfactory/df-core/src/Providers/CorsServiceProvider.php(38): DreamFactory\Core\Providers\CorsServiceProvider->getOptions(Object(Illuminate\Http\Request))
#10 [internal function]: DreamFactory\Core\Providers\CorsServiceProvider->boot(Object(Illuminate\Http\Request), Object(DreamFactory\Http\Kernel))
#11 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
#12 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#13 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#14 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Container/Container.php(539): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#15 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(788): Illuminate\Container\Container->call(Array)
#16 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(771): Illuminate\Foundation\Application->bootProvider(Object(DreamFactory\Core\Providers\CorsServiceProvider))
#17 [internal function]: Illuminate\Foundation\Application->Illuminate\Foundation\{closure}(Object(DreamFactory\Core\Providers\CorsServiceProvider), 17)
#18 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(772): array_walk(Array, Object(Closure))
#19 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Bootstrap/BootProviders.php(17): Illuminate\Foundation\Application->boot()
#20 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(208): Illuminate\Foundation\Bootstrap\BootProviders->bootstrap(Object(Illuminate\Foundation\Application))
#21 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(162): Illuminate\Foundation\Application->bootstrapWith(Array)
#22 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(146): Illuminate\Foundation\Http\Kernel->bootstrap()
#23 /opt/bitnami/apps/dreamfactory/htdocs/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#24 /opt/bitnami/apps/dreamfactory/htdocs/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#25 {main}  

And from the browser, this error 5 times:

app.4a74c4be.js:1 GET http://ec2-13-59-152-185.us-east-2.compute.amazonaws.com/api/v2/system/environment 500 (Internal Server Error)
_getApiDataSync @ app.4a74c4be.js:1
getApiDataSync @ app.4a74c4be.js:1
getSystemConfig @ app.4a74c4be.js:1
link @ app.4a74c4be.js:1
(anonymous) @ vendor.a5a708f2.js:1
nodeLinkFn @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
wrappedCallback @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
$eval @ vendor.a5a708f2.js:1
$digest @ vendor.a5a708f2.js:1
$apply @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
completeRequest @ vendor.a5a708f2.js:1
xhr.onreadystatechange @ vendor.a5a708f2.js:1
XMLHttpRequest.send (async)
(anonymous) @ vendor.a5a708f2.js:1
sendReq @ vendor.a5a708f2.js:1
chain @ vendor.a5a708f2.js:1
wrappedCallback @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
$eval @ vendor.a5a708f2.js:1
$digest @ vendor.a5a708f2.js:1
$apply @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
completeRequest @ vendor.a5a708f2.js:1
xhr.onreadystatechange @ vendor.a5a708f2.js:1
XMLHttpRequest.send (async)
(anonymous) @ vendor.a5a708f2.js:1
sendReq @ vendor.a5a708f2.js:1
chain @ vendor.a5a708f2.js:1
wrappedCallback @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
$eval @ vendor.a5a708f2.js:1
$digest @ vendor.a5a708f2.js:1
$apply @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
invoke @ vendor.a5a708f2.js:1
doBootstrap @ vendor.a5a708f2.js:1
bootstrap @ vendor.a5a708f2.js:1
angularInit @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
mightThrow @ vendor.a5a708f2.js:1
process @ vendor.a5a708f2.js:1
setTimeout (async)
(anonymous) @ vendor.a5a708f2.js:1
fire @ vendor.a5a708f2.js:1
fireWith @ vendor.a5a708f2.js:1
fire @ vendor.a5a708f2.js:1
fire @ vendor.a5a708f2.js:1
fireWith @ vendor.a5a708f2.js:1
ready @ vendor.a5a708f2.js:1
completed @ vendor.a5a708f2.js:1

and this for times:


TypeError: Cannot read property 'authentication' of undefined
    at link (app.4a74c4be.js:1)
    at vendor.a5a708f2.js:1
    at nodeLinkFn (vendor.a5a708f2.js:1)
    at vendor.a5a708f2.js:1
    at vendor.a5a708f2.js:1
    at wrappedCallback (vendor.a5a708f2.js:1)
    at vendor.a5a708f2.js:1
    at Scope.$eval (vendor.a5a708f2.js:1)
    at Scope.$digest (vendor.a5a708f2.js:1)
    at Scope.$apply (vendor.a5a708f2.js:1)
(anonymous) @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
(anonymous) @ app.4a74c4be.js:1
nodeLinkFn @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
wrappedCallback @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
$eval @ vendor.a5a708f2.js:1
$digest @ vendor.a5a708f2.js:1
$apply @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
completeRequest @ vendor.a5a708f2.js:1
xhr.onreadystatechange @ vendor.a5a708f2.js:1
XMLHttpRequest.send (async)
(anonymous) @ vendor.a5a708f2.js:1
sendReq @ vendor.a5a708f2.js:1
chain @ vendor.a5a708f2.js:1
wrappedCallback @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
$eval @ vendor.a5a708f2.js:1
$digest @ vendor.a5a708f2.js:1
$apply @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
completeRequest @ vendor.a5a708f2.js:1
xhr.onreadystatechange @ vendor.a5a708f2.js:1
XMLHttpRequest.send (async)
(anonymous) @ vendor.a5a708f2.js:1
sendReq @ vendor.a5a708f2.js:1
chain @ vendor.a5a708f2.js:1
wrappedCallback @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
$eval @ vendor.a5a708f2.js:1
$digest @ vendor.a5a708f2.js:1
$apply @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
invoke @ vendor.a5a708f2.js:1
doBootstrap @ vendor.a5a708f2.js:1
bootstrap @ vendor.a5a708f2.js:1
angularInit @ vendor.a5a708f2.js:1
(anonymous) @ vendor.a5a708f2.js:1
mightThrow @ vendor.a5a708f2.js:1
process @ vendor.a5a708f2.js:1
setTimeout (async)
(anonymous) @ vendor.a5a708f2.js:1
fire @ vendor.a5a708f2.js:1
fireWith @ vendor.a5a708f2.js:1
fire @ vendor.a5a708f2.js:1
fire @ vendor.a5a708f2.js:1
fireWith @ vendor.a5a708f2.js:1
ready @ vendor.a5a708f2.js:1
completed @ vendor.a5a70
```8f2.js:1
leehicks commented 6 years ago

Seems there are permission issues with the Apache web user. Have you changed the default web server setup at all or ran any CLI commands to change permissions on the /storage directory?

wmcbruce commented 6 years ago

Only those in the upgrade instructions on the link I shared earlier.