+
+
diff --git a/maxkey-protocols/maxkey-protocol-cas/build/reports/tests/test/js/report.js b/maxkey-protocols/maxkey-protocol-cas/build/reports/tests/test/js/report.js
new file mode 100644
index 000000000..83bab4a19
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-cas/build/reports/tests/test/js/report.js
@@ -0,0 +1,194 @@
+(function (window, document) {
+ "use strict";
+
+ var tabs = {};
+
+ function changeElementClass(element, classValue) {
+ if (element.getAttribute("className")) {
+ element.setAttribute("className", classValue);
+ } else {
+ element.setAttribute("class", classValue);
+ }
+ }
+
+ function getClassAttribute(element) {
+ if (element.getAttribute("className")) {
+ return element.getAttribute("className");
+ } else {
+ return element.getAttribute("class");
+ }
+ }
+
+ function addClass(element, classValue) {
+ changeElementClass(element, getClassAttribute(element) + " " + classValue);
+ }
+
+ function removeClass(element, classValue) {
+ changeElementClass(element, getClassAttribute(element).replace(classValue, ""));
+ }
+
+ function initTabs() {
+ var container = document.getElementById("tabs");
+
+ tabs.tabs = findTabs(container);
+ tabs.titles = findTitles(tabs.tabs);
+ tabs.headers = findHeaders(container);
+ tabs.select = select;
+ tabs.deselectAll = deselectAll;
+ tabs.select(0);
+
+ return true;
+ }
+
+ function getCheckBox() {
+ return document.getElementById("line-wrapping-toggle");
+ }
+
+ function getLabelForCheckBox() {
+ return document.getElementById("label-for-line-wrapping-toggle");
+ }
+
+ function findCodeBlocks() {
+ var spans = document.getElementById("tabs").getElementsByTagName("span");
+ var codeBlocks = [];
+ for (var i = 0; i < spans.length; ++i) {
+ if (spans[i].className.indexOf("code") >= 0) {
+ codeBlocks.push(spans[i]);
+ }
+ }
+ return codeBlocks;
+ }
+
+ function forAllCodeBlocks(operation) {
+ var codeBlocks = findCodeBlocks();
+
+ for (var i = 0; i < codeBlocks.length; ++i) {
+ operation(codeBlocks[i], "wrapped");
+ }
+ }
+
+ function toggleLineWrapping() {
+ var checkBox = getCheckBox();
+
+ if (checkBox.checked) {
+ forAllCodeBlocks(addClass);
+ } else {
+ forAllCodeBlocks(removeClass);
+ }
+ }
+
+ function initControls() {
+ if (findCodeBlocks().length > 0) {
+ var checkBox = getCheckBox();
+ var label = getLabelForCheckBox();
+
+ checkBox.onclick = toggleLineWrapping;
+ checkBox.checked = false;
+
+ removeClass(label, "hidden");
+ }
+ }
+
+ function switchTab() {
+ var id = this.id.substr(1);
+
+ for (var i = 0; i < tabs.tabs.length; i++) {
+ if (tabs.tabs[i].id === id) {
+ tabs.select(i);
+ break;
+ }
+ }
+
+ return false;
+ }
+
+ function select(i) {
+ this.deselectAll();
+
+ changeElementClass(this.tabs[i], "tab selected");
+ changeElementClass(this.headers[i], "selected");
+
+ while (this.headers[i].firstChild) {
+ this.headers[i].removeChild(this.headers[i].firstChild);
+ }
+
+ var h2 = document.createElement("H2");
+
+ h2.appendChild(document.createTextNode(this.titles[i]));
+ this.headers[i].appendChild(h2);
+ }
+
+ function deselectAll() {
+ for (var i = 0; i < this.tabs.length; i++) {
+ changeElementClass(this.tabs[i], "tab deselected");
+ changeElementClass(this.headers[i], "deselected");
+
+ while (this.headers[i].firstChild) {
+ this.headers[i].removeChild(this.headers[i].firstChild);
+ }
+
+ var a = document.createElement("A");
+
+ a.setAttribute("id", "ltab" + i);
+ a.setAttribute("href", "#tab" + i);
+ a.onclick = switchTab;
+ a.appendChild(document.createTextNode(this.titles[i]));
+
+ this.headers[i].appendChild(a);
+ }
+ }
+
+ function findTabs(container) {
+ return findChildElements(container, "DIV", "tab");
+ }
+
+ function findHeaders(container) {
+ var owner = findChildElements(container, "UL", "tabLinks");
+ return findChildElements(owner[0], "LI", null);
+ }
+
+ function findTitles(tabs) {
+ var titles = [];
+
+ for (var i = 0; i < tabs.length; i++) {
+ var tab = tabs[i];
+ var header = findChildElements(tab, "H2", null)[0];
+
+ header.parentNode.removeChild(header);
+
+ if (header.innerText) {
+ titles.push(header.innerText);
+ } else {
+ titles.push(header.textContent);
+ }
+ }
+
+ return titles;
+ }
+
+ function findChildElements(container, name, targetClass) {
+ var elements = [];
+ var children = container.childNodes;
+
+ for (var i = 0; i < children.length; i++) {
+ var child = children.item(i);
+
+ if (child.nodeType === 1 && child.nodeName === name) {
+ if (targetClass && child.className.indexOf(targetClass) < 0) {
+ continue;
+ }
+
+ elements.push(child);
+ }
+ }
+
+ return elements;
+ }
+
+ // Entry point.
+
+ window.onload = function() {
+ initTabs();
+ initControls();
+ };
+} (window, window.document));
\ No newline at end of file
diff --git a/maxkey-protocols/maxkey-protocol-cas/build/test-results/test/binary/output.bin b/maxkey-protocols/maxkey-protocol-cas/build/test-results/test/binary/output.bin
new file mode 100644
index 000000000..e69de29bb
diff --git a/maxkey-protocols/maxkey-protocol-cas/build/test-results/test/binary/output.bin.idx b/maxkey-protocols/maxkey-protocol-cas/build/test-results/test/binary/output.bin.idx
new file mode 100644
index 000000000..f76dd238a
Binary files /dev/null and b/maxkey-protocols/maxkey-protocol-cas/build/test-results/test/binary/output.bin.idx differ
diff --git a/maxkey-protocols/maxkey-protocol-cas/build/test-results/test/binary/results.bin b/maxkey-protocols/maxkey-protocol-cas/build/test-results/test/binary/results.bin
new file mode 100644
index 000000000..e69de29bb
diff --git a/maxkey-protocols/maxkey-protocol-cas/build/tmp/jar/MANIFEST.MF b/maxkey-protocols/maxkey-protocol-cas/build/tmp/jar/MANIFEST.MF
new file mode 100644
index 000000000..2357620ba
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-cas/build/tmp/jar/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Implementation-Title: maxkey-protocol-cas
+Implementation-Version: 1.0.0.RELEASE
+Implementation-Date: 2019-11-10T12:35:40.160+08:00[Asia/Shanghai]
+Created-By: org.maxkey
+Implementation-Vendor: https://github.com/shimingxy/MaxKey
+
diff --git a/maxkey-protocols/maxkey-protocol-desktop/build/libs/maxkey-protocol-desktop-1.0.0.RELEASE.jar b/maxkey-protocols/maxkey-protocol-desktop/build/libs/maxkey-protocol-desktop-1.0.0.RELEASE.jar
new file mode 100644
index 000000000..a42585e21
Binary files /dev/null and b/maxkey-protocols/maxkey-protocol-desktop/build/libs/maxkey-protocol-desktop-1.0.0.RELEASE.jar differ
diff --git a/maxkey-protocols/maxkey-protocol-desktop/build/tmp/jar/MANIFEST.MF b/maxkey-protocols/maxkey-protocol-desktop/build/tmp/jar/MANIFEST.MF
new file mode 100644
index 000000000..12fac2ac4
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-desktop/build/tmp/jar/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Implementation-Title: maxkey-protocol-desktop
+Implementation-Version: 1.0.0.RELEASE
+Implementation-Date: 2019-11-10T12:35:40.172+08:00[Asia/Shanghai]
+Created-By: org.maxkey
+Implementation-Vendor: https://github.com/shimingxy/MaxKey
+
diff --git a/maxkey-protocols/maxkey-protocol-extendapi/build/libs/maxkey-protocol-extendapi-1.0.0.RELEASE.jar b/maxkey-protocols/maxkey-protocol-extendapi/build/libs/maxkey-protocol-extendapi-1.0.0.RELEASE.jar
new file mode 100644
index 000000000..908b4802f
Binary files /dev/null and b/maxkey-protocols/maxkey-protocol-extendapi/build/libs/maxkey-protocol-extendapi-1.0.0.RELEASE.jar differ
diff --git a/maxkey-protocols/maxkey-protocol-extendapi/build/tmp/jar/MANIFEST.MF b/maxkey-protocols/maxkey-protocol-extendapi/build/tmp/jar/MANIFEST.MF
new file mode 100644
index 000000000..7bf1d73bd
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-extendapi/build/tmp/jar/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Implementation-Title: maxkey-protocol-extendapi
+Implementation-Version: 1.0.0.RELEASE
+Implementation-Date: 2019-11-10T12:35:40.185+08:00[Asia/Shanghai]
+Created-By: org.maxkey
+Implementation-Vendor: https://github.com/shimingxy/MaxKey
+
diff --git a/maxkey-protocols/maxkey-protocol-formbased/build/libs/maxkey-protocol-formbased-1.0.0.RELEASE.jar b/maxkey-protocols/maxkey-protocol-formbased/build/libs/maxkey-protocol-formbased-1.0.0.RELEASE.jar
new file mode 100644
index 000000000..692879957
Binary files /dev/null and b/maxkey-protocols/maxkey-protocol-formbased/build/libs/maxkey-protocol-formbased-1.0.0.RELEASE.jar differ
diff --git a/maxkey-protocols/maxkey-protocol-formbased/build/tmp/jar/MANIFEST.MF b/maxkey-protocols/maxkey-protocol-formbased/build/tmp/jar/MANIFEST.MF
new file mode 100644
index 000000000..ee8cd60e4
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-formbased/build/tmp/jar/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Implementation-Title: maxkey-protocol-formbased
+Implementation-Version: 1.0.0.RELEASE
+Implementation-Date: 2019-11-10T12:35:40.194+08:00[Asia/Shanghai]
+Created-By: org.maxkey
+Implementation-Vendor: https://github.com/shimingxy/MaxKey
+
diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/build.gradle b/maxkey-protocols/maxkey-protocol-oauth-2.0/build.gradle
index cef067c21..7e9ae1f79 100644
--- a/maxkey-protocols/maxkey-protocol-oauth-2.0/build.gradle
+++ b/maxkey-protocols/maxkey-protocol-oauth-2.0/build.gradle
@@ -7,6 +7,7 @@ dependencies {
compile project(":maxkey-core")
compile project(":maxkey-dao")
compile project(":maxkey-jose-jwt")
+ compile project(":maxkey-client-sdk")
compile project(":maxkey-protocols:maxkey-protocol-authorize")
}
\ No newline at end of file
diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/build/libs/maxkey-protocol-oauth-2.0-1.0.0.RELEASE.jar b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/libs/maxkey-protocol-oauth-2.0-1.0.0.RELEASE.jar
new file mode 100644
index 000000000..a43a8bf8a
Binary files /dev/null and b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/libs/maxkey-protocol-oauth-2.0-1.0.0.RELEASE.jar differ
diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/MANIFEST.MF b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/MANIFEST.MF
new file mode 100644
index 000000000..254272e1c
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/spring.handlers b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/spring.handlers
new file mode 100644
index 000000000..c9bae2aa3
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/spring.handlers
@@ -0,0 +1,2 @@
+http\://www.springframework.org/schema/security/oauth2=org.springframework.security.oauth2.config.xml.OAuth2SecurityNamespaceHandler
+http\://www.springframework.org/schema/security/oauth=org.springframework.security.oauth.config.OAuthSecurityNamespaceHandler
diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/spring.schemas b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/spring.schemas
new file mode 100644
index 000000000..af765299f
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/META-INF/spring.schemas
@@ -0,0 +1,5 @@
+http\://www.springframework.org/schema/security/spring-security-oauth2-1.0.xsd=org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd
+http\://www.springframework.org/schema/security/spring-security-oauth2-2.0.xsd=org/springframework/security/oauth2/spring-security-oauth2-2.0.xsd
+http\://www.springframework.org/schema/security/spring-security-oauth2.xsd=org/springframework/security/oauth2/spring-security-oauth2-2.0.xsd
+http\://www.springframework.org/schema/security/spring-security-oauth-1.0.xsd=org/springframework/security/oauth/spring-security-oauth-1.0.xsd
+http\://www.springframework.org/schema/security/spring-security-oauth.xsd=org/springframework/security/oauth/spring-security-oauth-1.0.xsd
\ No newline at end of file
diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd
new file mode 100644
index 000000000..71007dd0b
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/resources/main/org/springframework/security/oauth2/spring-security-oauth2-1.0.xsd
@@ -0,0 +1,728 @@
+
+
+
+
+
+
+
+
+ Creates an OAuth2RestTemplate with all the pieces needed to connect to a remote resource from
+ a web
+ application. Injects request and session-scoped beans into the template, so can only be
+ used in the context of a web
+ request.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The OAuth2ProtectedResourceDetails governing the configuration of this client. Mandatory.
+
+
+
+
+
+
+ The reference to the bean that manages access token acquisition. Optional (defaults to a chain
+ including common grant types from the spec).
+
+
+
+
+
+
+
+
+
+
+
+ Specifies that the oauth 2 authorization and token
+ endpoints should be created in the application
+ context. These are
+ implemented as regular Spring @Controller beans, so as long as the
+ default Spring MVC set up in
+ present in the application
+ the endpoints should work (at /oauth/authorization and /oauth/token by
+ default).
+
+
+
+
+
+
+
+
+ The configuration of the authorization code
+ mechanism. This
+ mechanism enables a way for clients to
+ obtain an
+ access token by obtaining an authorization code.
+
+
+
+
+
+
+ Whether to disable the authorization code
+ mechanism.
+
+
+
+
+
+
+ The reference to the bean that defines the
+ authorization code
+ services. Default value is an
+ instance of
+ "org.springframework.security.oauth2.provider.authorization_code.InMemoryAuthorizationCodeServices".
+
+
+
+
+
+
+
+
+ The configuration of the client credentials
+ grant type.
+
+
+
+
+
+
+ Whether to disable the implicit grant type
+
+
+
+
+
+
+
+
+ The configuration of the refresh token grant
+ type.
+
+
+
+
+
+
+ Whether to disable the refresh token grant
+ type
+
+
+
+
+
+
+
+
+ The configuration of the client credentials
+ grant type.
+
+
+
+
+
+
+ Whether to disable the refresh token grant
+ type
+
+
+
+
+
+
+
+
+ The configuration of the resource owner password
+ grant type.
+
+
+
+
+
+
+ Whether to disable the refresh token grant
+ type
+
+
+
+
+
+
+ A reference to an authentication manager that
+ can be used to
+ authenticate the resource owner
+
+
+
+
+
+
+
+
+ The configuration of your custom grant type.
+
+
+
+
+
+
+ Whether to disable this grant
+ type
+
+
+
+
+
+
+ A reference to your token granter
+
+
+
+
+
+
+
+
+
+ The reference to the bean that defines the client
+ details service.
+
+
+
+
+
+
+ The URL at which a request for an access token
+ will be serviced.
+ Default value: "/oauth/token"
+
+
+
+
+
+
+ The URL at which a user is redirected for
+ authorization. Default
+ value: "/oauth/authorize"
+
+
+
+
+
+
+
+
+ The reference to the bean that defines the
+ granter of different oauth
+ token types.
+
+
+
+
+
+
+
+ The reference to the bean that defines the
+ implicit grant service.
+
+
+
+
+
+
+
+ The reference to the bean that defines the token
+ services. Default
+ value is an instance of
+ "org.springframework.security.oauth2.provider.token.DefaultTokenServices".
+
+
+
+
+
+
+
+ The reference to the bean that defines the manager for
+ authorization requests from the input
+ parameters (e.g. request parameters).
+ Default
+ value is an
+ instance of
+ "org.springframework.security.oauth2.provider.token.DefaultAuthorizationRequestManager".
+
+
+
+
+
+
+
+ Reference to a bean that handles user approval decisions. Using this strategy servers can
+ selectively skip the approval process depending on decisions in the past or on the type of client.
+
+
+
+
+
+
+
+ The URL of the page that handles the user
+ approval form (if needed, depending on the grant type).
+ The default is "forward:/oauth/confirm_access" which is not handled
+ by the authorization endpoint, so normally you
+ will have to supply a handler
+ for this path.
+
+
+
+
+
+
+
+ The URL of the page that handles errors (default forward:/oauth/error).
+
+
+
+
+
+
+
+ The name of the form parameter that is used to
+ indicate user
+ approval of the client
+ authentication
+ request.
+ Default value: "user_oauth_approval".
+
+
+
+
+
+
+
+ The reference to the bean that defines the
+ redirect resolver, used
+ during the user
+ authorization.
+ Default
+ value is an instance of
+ "org.springframework.security.oauth2.provider.authorization_code.DefaultRedirectResolver".
+
+
+
+
+
+
+
+
+
+
+ Specifies that there are oauth 2 protected resources in
+ the application context. This element
+ has an
+ id which is the bean id of the filter created. The filter
+ should be added to the Spring Security filter chain at
+ position before="PRE_AUTH_FILTER"
+
+
+
+
+
+
+
+
+
+ The resource id that is protected by this filter
+ if any. If empty or
+ absent then all resource ids
+ are allowed,
+ otherwise
+ only tokens which are granted to a client that contains
+ this reosurce
+ id will be legal.
+
+
+
+
+
+
+
+ The reference to the bean that defines the token
+ services. Default
+ value is an instance of
+ "org.springframework.security.oauth2.provider.token.DefaultTokenServices".
+
+
+
+
+
+
+
+ The reference to the bean that defines the entry point for failed authentications. Defaults to
+ a vanilla
+ org.springframework.security.oauth2.provider.error.OAuth2AuthenticationEntryPoint.
+
+
+
+
+
+
+
+ The reference to the bean that defines the AuthenticationDetailsSource.
+
+
+
+
+
+
+
+
+
+
+
+ Default element that contains the definition of the
+ OAuth clients that are
+ allowed to access this
+ service.
+
+
+
+
+
+
+
+
+
+
+ Definition of a client that can act on behalf
+ of a user.
+
+
+
+
+
+
+
+ The client id.
+
+
+
+
+
+
+ The client secret. If the secret is
+ undefined or empty (the
+ default) the client does
+ not
+ require a
+ secret.
+
+
+
+
+
+
+ The re-direct URI(s) established during
+ registration (optional, comma separated).
+
+
+
+
+
+
+ The resource ids to which this client can be
+ granted access
+ (comma-separated). If missing or
+ empty all
+ resources are
+ accessible (not recommended by the spec).
+
+
+
+
+
+
+ The scopes to which the client is limited
+ (comma-separated). If
+ scope is undefined or empty
+ (the
+ default) the client
+ is not limited by scope, but in that case
+ the authorization
+ service must explicitly
+ accept unlimited
+ access by not
+ specifying any scopes itself.
+
+
+
+
+
+
+ Grant types that are authorized for the
+ client to use
+ (comma-separated). Currently defined
+ grant types
+ include
+ "authorization_code", "password", "assertion", and
+ "refresh_token". Default value is
+ "authorization_code,refresh_token".
+
+
+
+
+
+
+ Authorities that are granted to the client
+ (comma-separated). Distinct
+ from the authorities
+ granted to
+ the user on behalf
+ of whom the client is acting.
+
+
+
+
+
+
+ The access token validity period in seconds (optional). If unspecified a global default will
+ be applied by the token services.
+
+
+
+
+
+
+ The refresh token validity period in seconds (optional). If unspecified a global default
+ will
+ be applied by the token services.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Element for declaring and configuring an expression
+ handler for oauth
+ security expressions. See
+ http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html
+
+
+
+
+
+
+
+
+
+
+
+
+ Element for declaring and configuring an expression
+ handler for oauth
+ security expressions in http
+ intercept urls. See
+ http://static.springsource.org/spring-security/site/docs/3.0.x/reference/el-access.html
+
+
+
+
+
+
+
+
+
+
+
+
+ Creates the oauth 2 client filter be be added to the
+ application security policy.
+
+
+
+
+
+
+
+
+ The reference to the bean that defines the
+ redirect strategy, used when redirecting the user for
+ access authorization. Default value is an instance of
+ "org.springframework.security.web.DefaultRedirectStrategy".
+
+
+
+
+
+
+
+
+
+
+
+ Definition of a remote resource that is protected via
+ OAuth2 to which this client application wants
+ access.
+
+
+
+
+
+
+
+
+ The grant type. Currently defined grant types
+ include
+ "authorization_code", "password", and
+ "assertion".
+ Default value
+ is "authorization_code".
+
+
+
+
+
+
+ The client id. This is the id by which the
+ resource server will
+ identify this application.
+
+
+
+
+
+
+ The uri to where the access token may be
+ obtained.
+
+
+
+
+
+
+ Comma-separted list of string specifying the
+ scope of the access to the
+ resource. By default,
+ no
+ scope will be
+ specified.
+
+
+
+
+
+
+ The secret asssociated with the resource. By
+ default, no secret
+ will be supplied for access to
+ the resource.
+
+
+
+
+
+
+ The scheme that is used to pass the client
+ secret. Suggested
+ values: "header" and "form".
+ Default:
+ "header".
+ See section 2.1 of the OAuth 2 spec.
+
+
+
+
+
+
+ The uri to which the user will be redirected if
+ the user is ever
+ needed to grant an authorization
+ code.
+
+
+
+
+
+
+ The method for bearing the token when accessing
+ the resource.
+ Default value is "header". See
+ AuthenticationScheme enum for possible values.
+
+
+
+
+
+
+ The name of the bearer token. The default is
+ "access_token", which
+ is according to the spec,
+ but
+ some providers
+ (e.g. Facebook) don't conform to the spec.
+
+
+
+
+
+
+ Some resource servers may require a
+ pre-established URI to which
+ they will redirect users after
+ users
+ authorize an access token.
+
+
+
+
+
+
+ Boolean flag indicating that the current URI should be used as a redirect (if available) rather
+ than the
+ registered redirect URI. Default is true.
+
+
+
+
+
+
+ The username for authentication, required only when type is "password".
+
+
+
+
+
+
+ The password for authentication, required only when type is "password".
+
+
+
+
+
+
+
+
+
diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/build/tmp/jar/MANIFEST.MF b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/tmp/jar/MANIFEST.MF
new file mode 100644
index 000000000..090f3deda
--- /dev/null
+++ b/maxkey-protocols/maxkey-protocol-oauth-2.0/build/tmp/jar/MANIFEST.MF
@@ -0,0 +1,7 @@
+Manifest-Version: 1.0
+Implementation-Title: maxkey-protocol-oauth-2.0
+Implementation-Version: 1.0.0.RELEASE
+Implementation-Date: 2019-11-10T12:35:40.204+08:00[Asia/Shanghai]
+Created-By: org.maxkey
+Implementation-Vendor: https://github.com/shimingxy/MaxKey
+
diff --git a/maxkey-protocols/maxkey-protocol-oauth-2.0/src/main/java/org/maxkey/authz/oauth2/provider/endpoint/AuthorizationEndpoint.java b/maxkey-protocols/maxkey-protocol-oauth-2.0/src/main/java/org/maxkey/authz/oauth2/provider/endpoint/AuthorizationEndpoint.java
index b28735bdd..118adc4ac 100644
--- a/maxkey-protocols/maxkey-protocol-oauth-2.0/src/main/java/org/maxkey/authz/oauth2/provider/endpoint/AuthorizationEndpoint.java
+++ b/maxkey-protocols/maxkey-protocol-oauth-2.0/src/main/java/org/maxkey/authz/oauth2/provider/endpoint/AuthorizationEndpoint.java
@@ -21,6 +21,10 @@ import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.maxkey.authz.endpoint.AuthorizeBaseEndpoint;
import org.maxkey.authz.oauth2.common.OAuth2AccessToken;
import org.maxkey.authz.oauth2.common.exceptions.InvalidClientException;
import org.maxkey.authz.oauth2.common.exceptions.InvalidRequestException;
@@ -41,13 +45,20 @@ import org.maxkey.authz.oauth2.provider.code.AuthorizationCodeServices;
import org.maxkey.authz.oauth2.provider.code.InMemoryAuthorizationCodeServices;
import org.maxkey.authz.oauth2.provider.implicit.ImplicitTokenRequest;
import org.maxkey.authz.oauth2.provider.request.DefaultOAuth2RequestValidator;
+import org.maxkey.client.utils.HttpEncoder;
+import org.maxkey.config.ApplicationConfig;
import org.maxkey.domain.apps.oauth2.provider.ClientDetails;
import org.maxkey.web.WebContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.security.authentication.InsufficientAuthenticationException;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@@ -61,6 +72,7 @@ import org.springframework.web.servlet.view.RedirectView;
import org.springframework.web.util.UriComponents;
import org.springframework.web.util.UriComponentsBuilder;
import org.springframework.web.util.UriTemplate;
+import org.maxkey.authz.oauth2.provider.ClientDetailsService;
/**
*