私はJava WebServer(Radius Clientとして)をWindows Server(Radius Serverとして)に認証するのにTinyRadiusを使用しています。Radius Protocol - サーバーにパスコードを送信する方法は?
ユーザーのアクセス要求をサーバーに正常に送信し、パスコードを戻しました。
final RadiusClient client = new RadiusClient(
new RadiusEndpoint(
new InetSocketAddress(RADIUS_SERVER_ADDRESS, PORT),
SHARED_SECRET
)
);
final AccessRequest request = new AccessRequest(
USERNAME,
USER_PASS
);
request.setAuthProtocol(AccessRequest.AUTH_PAP);
request.addAttribute("NAS-IP-Address", RADIUS_CLIENT_ADDRESS);
RadiusPacket packet = null;
try {
packet = client.authenticate(request);
} catch (final RadiusException | IOException ex) {
System.out.println(ex.getMessage());
ex.printStackTrace();
}
このコードの後には、ユーザー認証がサーバーによって承認されたことを示すログが続きます。
Sep 29, 2017 10:05:32 AM org.tinyradius.util.RadiusClient authenticate
INFO: send Access-Request packet: Access-Request, ID 1
User-Name: mp
NAS-IP-Address: 192.168.0.58
Sep 29, 2017 10:05:33 AM org.tinyradius.util.RadiusClient authenticate
INFO: received packet: Access-Challenge, ID 1
State: 0x7b41324244344539362d453139332d344539392d413134322d4134423536364441443938437d
Reply-Message: Enter PASSCODE
Windows Serverのイベントビューアーにも、アクセス要求が受け入れられたと記載されています。
実際に私はモバイルアプリケーションでパスコードを正しく受信しています(私はCensornetのSMSパスコードを使用していますが、これは無関係です)。
残念ながら、私は、ウェブ上の任意のTinyRadiusパスコードの例を見つけることができませんでしたが、他のライブラリをブラウズしながら、私はと述べており、このpython libraryつまずい:チャレンジ - レスポンス例外がmessages
とstate
属性を持っている
messages
ユーザに チャレンジレスポンスを促すメッセージを表示することができます。state
をRADIUS属性としてエコーバックする必要があります。
と
最後に、パスワードの代わりにユーザー からのチャレンジレスポンスを使用して再度認証します。
私がしたのは、上記の同じコードを使用することでした。 USER_PASSの代わりにPASSCODEを入れ、私のAccessRequestに状態属性を追加します。
final RadiusAttribute stateAttr = new RadiusAttribute(24, STATE.getBytes());
request.addAttribute(stateAttr);
私はこの要求をサーバーに送信し、このログを見ることができます。
Event description:
Event type: Authentication request
Result: Failure
Failure reason: Password validation failed
は、だから私は、セクション4.4でRFC 2865アクセスチャレンジ章を読んで、そして、彼らはそれを述べる:
Sep 29, 2017 10:34:04 AM org.tinyradius.util.RadiusClient authenticate
INFO: send Access-Request packet: Access-Request, ID 1
User-Name: mp
NAS-IP-Address: 192.168.0.58
State: 0x307837623431343133353330333433363334333832643433333433343339326433343432343633303264343234343335343532643330343533323337343633383332333333373332333933373764
Sep 29, 2017 10:34:04 AM org.tinyradius.util.RadiusClient authenticate
INFO: received packet: Access-Reject, ID 1
Reply-Message: Session is unknown or has expired
Windowsイベントビューアは述べて
有効なの領収書 アクセス挑戦は、新しいアクセス要求が であることを示します。[...] ユーザパスワード属性を ユーザの応答(暗号化されている)、および存在する場合にはAccess-Challengeからの状態属性 を含む。アクセス要求には、状態属性のインスタンスが0または1つしか存在できません。
私はすべてのことを正しくやっています。誰でも私をここで助けてもらえますか