/o//commerce-media/accounts/-1/images/18654201?download=true

TwoWay Authentication - 7.2 - DXP (perpetual license)
DXP App
Identity Management & Governance
18654149

TwoWay Premium is a plugin providing Two Steps Authentication to access you Liferay portal instance.

Two factor verification adds an extra security layer for your Liferay Portal account by requiring user to enter a one-time verification code in addition to your username and password, when signing in to your account. Our code is based on well-know libraries, open algorithms and standards and fit perfectly in Liferay Portal, so is possible to enable it together with other authentication provider like LDAP.

Into portal control panel, Admin can:
- enable TwoWay Authentication per portal as for embedded Liferay's methods
- choose which OTP delivery channels enable for portal users (check below for possible methods)
- set two-step authentication as mandatory for all the users or a specific Role
- add IP white lists in order to disable OTP from company network or other trusted zone (you can disable IP's checks setting the specific portal properties "twowayauthentication.webserver.headers.forwardedfor" to "skip".)
- disable Backup Codes functionality
- enable "Force authentication by email", that can be useful if a user forget it's phone

Into personal control panel, User can:
- enable or disable TwoWay for its specific account
- choose how to obtain the OTP choosing from Admin's enabled channel set
- manage Backup Codes, useful if a user forgot or changed it's phone
- manage Application Passwords in order to grant access to specific applications like Liferay Sync

OTP delivery methods:
- Email
- SMS: in this case you have to configure a Twilio account
- Apps: Google Authenticator, Authy, LastPass or other similar apps free available on platform specific store

Encryption:
- user's Hashcode is stored as encrypted
- user's Backup code are stored as encrypted

Now you can customize and add your own labels translation simply using our public git repo: https://bitbucket.org/threadsolutions/twowayauthenticationresourcebundleoverride/src .
Enjoy!

DEVELOPER
Virhe tapahtui prosessoidessa esitysmallia.
The following has evaluated to null or missing:
==> product.publisherName  [in template "3192443#3192485#null" at line 28, column 23]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: publisherName = product.publisherName  [in template "3192443#3192485#null" at line 28, column 9]
----
1<#if themeDisplay?has_content> 
2	<#assign scopeGroupId = themeDisplay.getScopeGroupId() /> 
3</#if> 
4 
5<#if currentURL?has_content> 
6	<#if currentURL?contains('web')> 
7		<#assign 
8			index = 2 
9			partsUrl = currentURL?split('/') 
10			siteName = partsUrl[index..index]?join('/') 
11		/> 
12	</#if> 
13</#if> 
14 
15<#assign channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${scopeGroupId}'") /> 
16 
17<#if channel?has_content> 
18	<#assign channelId = channel.items[0].id /> 
19</#if> 
20 
21<#if (CPDefinition_cProductId.getData())??> 
22	<#assign productId = CPDefinition_cProductId.getData() /> 
23</#if> 
24 
25<#assign 
26	product = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/"+ channelId +"/products/"+ productId +"?accountId=-1&nestedFields=productSpecifications") 
27	productSpecifications = product.productSpecifications![] 
28	publisherName=product.publisherName 
29/> 
30 
31<#if publisherName?has_content> 
32	<#assign publisePages=restClient.get("/c/publisherdetailses?filter=catalogName eq '${publisherName}'" ) /> 
33	<#assign redirectPath="https://marketplace-uat.liferay.com/e/publisher-details/29282497"/> 
34	 
35	<#if publisePages?has_content> 
36		<#assign publisePage=publisePages.items /> 
37			<#if publisePage?has_content> 
38						<#assign publisherDetail=publisePage[0]/> 
39			</#if> 
40	</#if> 
41</#if> 
42 
43<div> 
44	<#if productSpecifications?has_content> 
45		<#assign developerNames = productSpecifications?filter(item -> stringUtil.equals(item.specificationKey, "developer-name")) /> 
46 
47		<#if developerNames?has_content> 
48			<#list developerNames as developerName> 
49				<#if publisherDetail?has_content> 
50					<a class="bg-neutral-8" href="${redirectPath}/${publisherDetail.id}"> 
51						${developerName.value} 
52					</a> 
53				<#else> 
54					<a class="bg-neutral-8" 	href="/?developer-name=${developerName.value}"> 
55						${developerName.value} 
56					</a> 
57				</#if> 
58			</#list> 
59		</#if> 
60	</#if> 
61</div> 
DEVELOPER
21.11.2024 18:43
Published date
21.11.2024 18:43
Published Date
21.11.2024 18:43
SUPPORTED OFFERINGS
Liferay PaaS, Liferay Self-Hosted
Supported Versions
7.2
Resource Requirements
Edition
CE, EE
PRICE
Paid
help & support
SHARE LINK
Copy & Share

HTML Example

A paragraph is a self-contained unit of a discourse in writing dealing with a particular point or idea. Paragraphs are usually an expected part of formal writing, used to organize longer prose.