fix auth
This commit is contained in:
parent
2ff3f3b2c1
commit
64873bdf54
@ -13,9 +13,8 @@
|
|||||||
-export([check/5]).
|
-export([check/5]).
|
||||||
|
|
||||||
%% 检测token是否是合法值
|
%% 检测token是否是合法值
|
||||||
-spec check(Username :: binary(), Token :: binary(), UUID :: binary(), Salt :: binary(), Timestamp :: integer()) -> boolean().
|
-spec check(Username :: binary(), Token :: binary(), UUID :: binary(), Salt :: binary(), Timestamp :: integer()) ->
|
||||||
check(Username, Token, UUID, Salt, Timestamp) when is_binary(Username), is_binary(Token), is_binary(UUID), is_binary(Salt), is_integer(Timestamp) ->
|
ok | {error, Reason :: binary()}.
|
||||||
true;
|
|
||||||
check(Username, Token, UUID, Salt, Timestamp) when is_binary(Username), is_binary(Token), is_binary(UUID), is_binary(Salt), is_integer(Timestamp) ->
|
check(Username, Token, UUID, Salt, Timestamp) when is_binary(Username), is_binary(Token), is_binary(UUID), is_binary(Salt), is_integer(Timestamp) ->
|
||||||
BinTimestamp = integer_to_binary(Timestamp),
|
BinTimestamp = integer_to_binary(Timestamp),
|
||||||
%% 1分钟内有效
|
%% 1分钟内有效
|
||||||
@ -24,10 +23,15 @@ check(Username, Token, UUID, Salt, Timestamp) when is_binary(Username), is_binar
|
|||||||
{ok, PreTokens} = application:get_env(iot, pre_tokens),
|
{ok, PreTokens} = application:get_env(iot, pre_tokens),
|
||||||
case proplists:get_value(Username, PreTokens) of
|
case proplists:get_value(Username, PreTokens) of
|
||||||
undefined ->
|
undefined ->
|
||||||
false;
|
{error, <<"illegal user">>};
|
||||||
PreToken when is_binary(PreToken) ->
|
PreToken when is_binary(PreToken) ->
|
||||||
iot_util:md5(<<Salt/binary, "!", PreToken/binary, "!", UUID/binary, "!", BinTimestamp/binary>>) =:= Token
|
case iot_util:md5(<<Salt/binary, "!", PreToken/binary, "!", UUID/binary, "!", BinTimestamp/binary>>) =:= Token of
|
||||||
|
true ->
|
||||||
|
ok;
|
||||||
|
false ->
|
||||||
|
{error, <<"invalid token">>}
|
||||||
|
end
|
||||||
end;
|
end;
|
||||||
false ->
|
false ->
|
||||||
false
|
{error, <<"invalid timestamp">>}
|
||||||
end.
|
end.
|
||||||
@ -224,7 +224,7 @@ handle_request_frame(#'RequestFrame'{packet_id = PacketId,
|
|||||||
|
|
||||||
logger:debug("[ws_channel] auth uuid: ~p", [UUID]),
|
logger:debug("[ws_channel] auth uuid: ~p", [UUID]),
|
||||||
case iot_auth:check(Username, Token, UUID, Salt, Timestamp) of
|
case iot_auth:check(Username, Token, UUID, Salt, Timestamp) of
|
||||||
true ->
|
ok ->
|
||||||
case iot_api_client:get_host_by_uuid(UUID) of
|
case iot_api_client:get_host_by_uuid(UUID) of
|
||||||
undefined ->
|
undefined ->
|
||||||
logger:warning("[ws_channel] uuid: ~p, user: ~p, host not found", [UUID, Username]),
|
logger:warning("[ws_channel] uuid: ~p, user: ~p, host not found", [UUID, Username]),
|
||||||
@ -248,9 +248,9 @@ handle_request_frame(#'RequestFrame'{packet_id = PacketId,
|
|||||||
{stop, State}
|
{stop, State}
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
false ->
|
{error, Reason} ->
|
||||||
send_reply_frame(Transport, Socket, PacketId, {error, #'ReplyFrame.Error'{code = 2, message = <<"auth failed">>}}),
|
send_reply_frame(Transport, Socket, PacketId, {error, #'ReplyFrame.Error'{code = 2, message = Reason}}),
|
||||||
logger:warning("[ws_channel] uuid: ~p, user: ~p, auth failed", [UUID, Username]),
|
logger:warning("[ws_channel] uuid: ~p, user: ~p, auth failed, reason: ~p", [UUID, Username, Reason]),
|
||||||
{stop, State}
|
{stop, State}
|
||||||
end;
|
end;
|
||||||
handle_request_frame(#'RequestFrame'{packet_id = PacketId, body = {container_request, ContainerRequest}}, _Transport, _Socket, State) ->
|
handle_request_frame(#'RequestFrame'{packet_id = PacketId, body = {container_request, ContainerRequest}}, _Transport, _Socket, State) ->
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user