ユーザーを認証する必要がある場合は、ユーザーのみが電子メールにアクセスできると仮定して、電子メールを使用するのが最も現実的な方法です。 (これはまた最も安いものです)。
URLを生成するときは、注意が必要なときです。基本的には、一意であり、公開されておらず、特定のユーザーに関連付けられていることを確認する必要があります。それを行う一般的で最も単純な方法は、URLにトークンを追加することです。さて、トークン生成に関連するいくつかの暗号要件がありますが、私はこの機能的に独自のコードを作成しないようにアドバイスします。 1回使用トークンの例として、https://tools.ietf.org/html/rfc6750をチェックすることができます。
しかし、このスレッドでLiferayにタグを付けたので、UserLocalServiceを使用して電子メールを生成することを検討できます。
またはURLを生成するため、このコードからインスピレーションを得る:
Date expirationDate = null;
if ((passwordPolicy != null) &&
(passwordPolicy.getResetTicketMaxAge() > 0)) {
expirationDate = new Date(
System.currentTimeMillis() +
(passwordPolicy.getResetTicketMaxAge() * 1000));
}
Ticket ticket = ticketLocalService.addDistinctTicket(
companyId, User.class.getName(), user.getUserId(),
TicketConstants.TYPE_PASSWORD, null, expirationDate,
serviceContext);
StringBundler sb = new StringBundler(6);
sb.append(serviceContext.getPortalURL());
sb.append(serviceContext.getPathMain());
sb.append("/portal/update_password?p_l_id=");
sb.append(serviceContext.getPlid());
sb.append("&ticketKey=");
sb.append(ticket.getKey());
passwordResetURL = sb.toString();
考え方があるが、私が見てきたベストプラクティスは、彼らは、パスワードのリセットがされていることを確認できるように、ユーザーに電子メールを送信することですパスワードを変更することができます。それ以上の確認なしにユーザ名に基づいてパスワードを変更することを許可しないでください。別のエンドポイントと通信するためにセキュリティ保護されていない制御可能なエンドポイントを作成すると、同じ状況になります。他の会社のサービスURLを公開しない目的でエンドポイントを作成している場合、これは良いアプローチになります。 – diaz994
@diegoalmespすべてのサービスに対してSpringセキュリティを使用して基本認証を実装できます。 – Gautam